2012-06-10 2 views
1

Я получаю следующее сообщение об ошибке при попытке запустить приложение IOS я разрабатываю:Отладка бесплатно() с Xcode

appname(6097,0x3e835d98) malloc: *** error for object 0x20104600: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 

Как я могу узнать, какие позвонить в free() возникла ошибка? Если добавить точку останова для malloc_error_break, весь стек трассировки я получаю вызов «malloc_error_break», который выглядит следующим образом:

libsystem_c.dylib`malloc_error_break: 
0x32f20fa8: push {r7, lr}       < Thread 1: breakpoint 1.1 
0x32f20faa: mov r7, sp 
0x32f20fac: nop  
0x32f20fae: nop  
0x32f20fb0: pop {r7, pc} 
0x32f20fb2: nop  

Если я не добавить точку останова для malloc_error_break, я получаю так же бесполезно стек trace, но на этот раз всего лишь __pthread_kill и инструкцию ассемблера.

Есть ли что-нибудь еще, что я могу сделать, чтобы получить лучшее представление о коде, который сгенерировал эту ошибку?

+0

Что это за приложение, использующее malloc() и free()? Разве вы не используете Objective-C? –

+0

Вы пытались профилировать память с помощью инструментов? – Sulthan

+0

@ Султан, я попробовал инструменты, но я тоже не нашел ничего полезного. Но, может быть, я не ищу в нужном месте ... Все, что я вижу во время отладки Memory Allocations с помощью инструментов, - это именно то, что касается распределения, ничего об этой ошибке. – rid

ответ

1

Я только что создал новый проект под названием «Test» со следующим main способом:

void* data = malloc(100);  
free(data); 
free(data); 

Тогда я открываю «продукт-> Изменить схему», нажмите на вкладку «Test.app» и нажмите по «Диагностике». Затем я выбираю «Enable Guard Malloc».

Теперь, если я запустил приложение, я получу перерыв на втором free.

+0

По-видимому, вы не можете использовать Guard Malloc на устройстве. Я попробую в симуляторе. – rid

+0

Он отлично поработал в симуляторе, спасибо! – rid

Смежные вопросы