Ошибка iOS Objec-C для освобождаемого указателя объекта не была выделена - PullRequest
4 голосов
/ 07 июля 2011

Я получаю следующую ошибку в xcode.

ошибка для объекта 0x4e18d00: освобожденный указатель не был выделен ** установите точку останова в malloc_error_break для отладки

Я настроил NSZombieEnabled в цели, чтобы я мог просмотреть вызов.Это

- [___ выпуск NSArrayI]

Похоже, я выпустил какой-то массив где-то еще в своем коде, а затем пул автоматического выпуска пытается его освободитьтакже, когда он уже сдан.

Как я могу узнать, где?Любая идея?

К вашему сведению, я создаю все свои массивы, используя метод arrayWithCapacity или что-то подобное, никогда не используйте методы alloc или init.Я не вижу нигде, где я выпускаю те же массивы.(возможно, я слепой !!)

Кроме того, поток управления выглядит следующим образом: Я нажимаю UIButton, запускаю функцию, прикрепленную к onclick.Это перейдет на различные логические уровни и затем вернет NSArray.Затем я могу перебрать этот массив в «функции кнопки onClick» и распечатать содержимое.Когда эта «функция кнопки onClick» закрывается, я получаю вышеуказанную ошибку в методе «main».

Еще одно замечание: в одной функции я создаю NSMutableArray, но хочу вернуть NSArray, поэтому я использую [[mutableArray copy] autorelease].Это нормально, верно?

Любой совет был бы очень признателен, так как я часто испытываю большие трудности в попытке отследить причину ошибок.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Я понял, что случилось ..

В классе книги у меня были главы, объявленные как NSAray, и в конструкторе по умолчанию я сказал

chapters = [NSArray array];

Я взял это из конструктора, и все хорошо. Спасибо за вашу помощь, ребята.

P.S. Если я забуду, может кто-нибудь отметить это как принятый ответ? Ура;)

0 голосов
/ 07 июля 2011

Когда происходит сбой вашего приложения, вы можете увидеть, на какой линии произошло сбой вашего приложения, а также последовательность функций, вызываемых до сбоя. Я думаю, что эта строка вызывает сбой [[mutableArray copy] autorelease]. потому что вы не сохраняете это. copy возвращает автоматически выпущенный объект. Вы можете увидеть в документации, что возвращает функция. В target-c обычно возвращает автоматически выпущенный объект.

...