EXC_BAD_ACCESS, когда replaceObject вызывается для NSMutableArray - PullRequest
1 голос
/ 22 июля 2010

Я пытаюсь заменить объект в NSMutableArray. В другом месте в моем классе я делаю это успешно. Ниже приведен пример сбоя кода.

NSNumber* newObject = [NSNumber numberWithDoulble:myCalculation];
NSLog(@"Old object at 12:%@",[myMisbehavingArray objectAtIndex:12];
[myMisbehavingArray replaceObjectAtIndex:12 withObject:newObject];

Я добавил оператор NSLog, чтобы убедиться, что myMisbehavingArray указывал на что-то, и это так, но при запуске программы я получаю EXC_BAD_ACCESS в точке метода replaceObjectAtIndex.

Есть идеи?

1 Ответ

0 голосов
/ 23 июля 2010

Я написал эти записи в блоге, чтобы помочь людям отлаживать EXC_BAD_ACCESS

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

http://loufranco.com/blog/files/debug-iphone-crash-EXC_BAD_ACCESS.html

Когда вы делаете что-то безобидное, что приводит к EXC_BAD_ACCESS, очень вероятно, что вы испортили кучу до этого. myMisbehavingArray может указывать на массив, но есть много других указателей.

Если вы можете надежно воспроизвести проблему очень простым способом, эта строка кода похожа на детектор повреждения кучи. Вы можете переместить его и посмотреть, где он падает, а где нет попыток сузить точку, где все пошло плохо.

Более сложный, но более надежный способ - включить Guard Malloc, а затем использовать отладчик для включения дополнительной проверки:

http://developer.apple.com/iphone/library/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...