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 }