• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Correct use of CFArraySortValues context parameter
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Correct use of CFArraySortValues context parameter


  • Subject: Correct use of CFArraySortValues context parameter
  • From: Markus Spoettl <email@hidden>
  • Date: Sat, 07 Dec 2013 14:49:17 +0100

I recently discovered a strange memory leak in a 3rd-party component I use. A call to CFArraySortValues() sometimes produced a leak, sometimes it didn't.

This was the invocation:

int context = kCFCompareCaseInsensitive;
CFArraySortValues(keyArray,
                  CFRangeMake(0, count),
                  (CFComparatorFunction)CFStringCompare, &context);

After reading through CFArraySortValues and CFStringCompare documentation it's clear (to me anyway) that the context is used incorrectly. The documentation doesn't imply it will dereference the context pointer at any point. That means that CFStringCompare will be called with the pointer value instead of the contents of that address.

Changing it to

CFArraySortValues(keyArray,
                  CFRangeMake(0, count),
                  (CFComparatorFunction)CFStringCompare,
                  (void*)kCFCompareCaseInsensitive);

made the leak go away. I can only assume that the author never realized the array wasn't going to be sorted the way he intended.

Can anyone tell me if the latter use of CFArraySortValues() is correct? It doesn't feel right to cast an int option to (void *) but the documentation simply doesn't say it will pass on a dereferenced value. The fact that the leak went away tells me I'm on the right track.

Regards
Markus
--
__________________________________________
Markus Spoettl
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


  • Follow-Ups:
    • Re: Correct use of CFArraySortValues context parameter
      • From: Ken Thomases <email@hidden>
  • Prev by Date: Re: Threaded drawing
  • Next by Date: Re: Correct use of CFArraySortValues context parameter
  • Previous by thread: Re: wantsDefaultClipping set to NO
  • Next by thread: Re: Correct use of CFArraySortValues context parameter
  • Index(es):
    • Date
    • Thread