Ошибка диагностики: релиз отправлен на освобожденный объект

Я получил это сообщение об ошибке:

message [CFString release] sent to deallocated object at 0x........

Как я могу узнать, какая строка вызвала эту проблему? Могу ли я выяснить, какой CFString использует отладчик?


person CarmeloS    schedule 25.04.2011    source источник


Ответы (3)


Если вы используете XCode 4, используйте инструмент Zombie (сборка и профиль). Когда появляется это сообщение, вы можете нажать стрелку, чтобы получить список всех мест, где строка была сохранена и освобождена.

person Kendall Helmstetter Gelner    schedule 25.04.2011

См. http://www.cocoadev.com/index.pl?NSZombieEnabled для ввода точку останова и вернуться к стеку, чтобы найти оператор выпуска, где это произошло.

person DavidN    schedule 25.04.2011

Во-первых, вы можете попробовать поискать в коде функции alloc/dealloc и подсчитать их.
Это было так: "count alloc == count Dealloc".
Второй шаг: смотрите. для некоторой конструкции:

NSString *myString = [NSString stringWith...]; // Auto alloc/init with content
[myString release]; // Release before use
NSLog(@"%@", myString); // Use after release

Или попробуйте отладить с помощью NSLog(%"retain count :%d", [myString retainCount]);

person iTux    schedule 25.04.2011
comment
Не выполняйте отладку с использованием счетчика сохранения. Это не говорит вам ничего полезного: /when-to-use-retaincount. - person jscs; 25.04.2011
comment
Вы также проверяете свою программу в «Инструментах» на утечку памяти и смотрите, где вы ее получаете :) - person iTux; 10.05.2011