GJain
GJain

Reputation: 5093

exc_bad_exception during CFRelease

I have a code line this and I get a crash consistently on line mentioned below.

    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
    ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
    for (...) {
        ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
        ...
        CFRelease(persn)
    }
    CFRelease(source);
    CFRelease(allPeople);
    CFRelease(addressBook);

I consistently get the error on the last line CFRelease(addressBook); . However,

if I remove line CFRelease(person) inside the for loop, then I stopped getting bad access error on last line

Would you know why is that the case?

What are the possible candidates for CFRelease in above code and why???

Upvotes: 1

Views: 111

Answers (1)

Mornirch
Mornirch

Reputation: 1144

Needn't to release person.

ABAddressBookCreateWithOptions -> need

ABAddressBookCopyDefaultSource -> need

CFArrayGetValueAtIndex -> needn't

Once you release allPeople, all person will be release.

Upvotes: 2

Related Questions