Malloc: *** ошибка для объекта 0x165060: освобожден указатель не был выделен?

У меня есть приложение, в котором у меня есть несколько видео и аудио и некоторые inapp purchase.all r отлично подходят для симулятора и работают отлично. Но вчера я создал приложение и пытался запустить на нем его сбой с самого начала. Ошибка отчет

malloc: *** error for object 0x165060: pointer being freed was not allocated
  *** set a breakpoint in malloc_error_break to debug

Кто-нибудь знает решение. Я не знаю, где это происходит, и в симуляторе работает отлично. Кто-нибудь может мне помочь?

Ответ 1

Вы, вероятно, слишком много раз выпускаете объект (например, вызываете alloc один раз и дважды выпускаете). Чтобы узнать, где, взгляните на методы в этом вопросе: Как найти причину malloc "double free" ошибка?

Мне лично нравится метод NSZombieEnabled.

Еще один совет: установить нулевые переменные после их выпуска.

Например: [bla release]; bla = nil;

Это гарантирует, что вы не будете случайно выпускать их дважды, так как освобождение nil ничего не делает.

Ответ 2

Я последовал за предложенным Talkol

В моем случае я заменил следующую строку

[myMutualArray removeAllObjects];

с

[myMutualArray removeAllObjects]; myMutualArray = nil;

И ошибка исчезла!

Ответ 3

Без какого-либо кода мы не сможем вам помочь. Но вы можете найти проблему самостоятельно, сообщение об ошибке даже сообщает вам, что делать: установите точку останова на malloc_error_break, и вы обычно найдете код, вызвавший проблему в трассировке стека.

Просто потому, что он работает в симуляторе, это просто не значит, что ваш код на 100% правильный. некоторые ошибки отображаются только на реальном устройстве (или наоборот).

Ответ 4

Протестируйте программу для утечек памяти, также проверьте autoreleases и независимо от того, выпускаете ли вы объекты должным образом или нет. Также нам нужно проверить, выделен ли выделенный объект памяти или нет. Также вам нужно быть осторожным в отношении автообновления, потому что мы могли бы освободить массив или строку или любой объект, который уже автореализован...

Вот некоторые из советов для определения точной проблемы:

  • Вы можете протестировать утечки, проанализировав свой проект (щелчок shift + command + k)

  • Используйте инструмент инструментов, то есть работает для утечек

  • Включить NSZombie в Xcode, процедура может быть найдена здесь

Надеюсь, что это поможет и работает!

Ответ 5

Это может быть вызвано инспектором сафари, вы можете отключить их. Подробнее см. В этом сообщении.

введите описание изображения здесь

Ответ 6

Я получил такую ошибку, когда вы пытаетесь позвонить бесплатно по указателю, что адрес не в начале блока. Например:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6 
 7    int a; // some integers
 8    int *pi;     // a pointer to an integer
 9    pi =(int*) malloc( 1*sizeof(int) );
10 
11    a = 5;
12    pi = &a; // pi points to a
13    pi++; // pi is not anymore at start
14    free(pi);
15 
16    printf("at the end, we are alived \n"); // this will not be printed
17  
18    return 0;
19 }