NSAutoReleaseNoPool() error, plus a weird bug
I have the following code, and am having some problems with it. Any help would be appreciated. When I run the code, I got an error:
2010-11-11 12:28:15.352 addressBook[25563:a0f] *** __NSAutoreleaseNoPool(): Object 0x100111010 of class NSCFArray autoreleased with no pool in place - just leaking
I tried adding an autorelease pool, but it gave me much worse errors (that stopped the program running at all), but maybe I did it wrong?
Also, for some reason, after it prompts for a name input, it instantly prompts for the address input before I have a chance to enter anything.. but it only does this on the first contact I'm adding. I have no idea how this could happen..
how many address would you like to input?
Running…
3
2010-11-11 12:28:15.352 addressBook[2556开发者_C百科3:a0f] *** __NSAutoreleaseNoPool(): Object 0x100111010 of class NSCFArray autoreleased with no pool in place - just leaking
Please input the name of contact
Please input the address of contact
john doe
Please input the birthday of contact
500 E. Main
so on, so forth.
printf("how many address would you like to input?\n");
int numAddresses;
scanf("%i", &numAddresses);
if(numAddresses<1) return 0;
NSMutableArray * arrayOfBooks = [NSMutableArray array];
for (int i = 0; i < numAddresses; ++i) {
book * f = [[book alloc] init];
[arrayOfBooks addObject:f];
[f release];
}
unsigned count = [arrayOfBooks count];
while (count--) {
id object = [arrayOfBooks objectAtIndex:count];
printf("Please input the name of contact\n");
char inputString1[50];
if(fgets(inputString1, sizeof inputString1, stdin)){
[object setName: inputString1];
}
printf("Please input the address of contact\n");
char inputString2[50];
fgets(inputString2, sizeof inputString2, stdin);
[object setAddress: inputString2];
printf("Please input the birthday of contact \n");
char inputString3[50];
fgets(inputString3, sizeof inputString3, stdin);
[object setBirthday: inputString3];
printf("Please input the phone number of contact \n");
char inputString4[50];
fgets(inputString4, sizeof inputString4, stdin);
[object setPhoneNumber: inputString4];
[object print];
}
return 0;
Thanks in advance.
If you are using Objective-C, you must wrap the whole main function with an auto release pool. You use it like this:
int main(int argc, char** argv) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// real code here
[pool drain];
return 0;
}
精彩评论