Obj-c, неверная контрольная сумма для освобожденного объекта - объект, вероятно, был изменен после освобождения - PullRequest
0 голосов
/ 06 декабря 2011

Я получаю эту ошибку

malloc: * * * error for object 0x8a591d4: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
No memory available to program now: unsafe to call malloc
No memory available to program now: unsafe to call malloc

Это происходит из этой строки

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" 
       ofType:@"plist"];
NSData *plistData = [NSData dataWithContentsOfFile:plistPath];
NSDictionary *loadedPlist = 
[NSPropertyListSerialization  propertyListFromData:plistData 
       mutabilityOption:0 format:NULL errorDescription:NULL]; <<< this line

Значение plistData установлено на Сводка недоступна

I'mне знаете с чего начать?

РЕДАКТИРОВАТЬ - добавлено больше кода

Ответы [ 3 ]

5 голосов
/ 06 декабря 2011

Я собираюсь добавить еще один ответ: также возможно, что у вас уже есть хип-куча, и вы отказываете в свойстве propertyListFromData: только потому, что оно выполняет много распределений и случайно попадает в плохое место.Поэтому отредактируйте свою схему в XCode и убедитесь, что у вас проверены все элементы управления памятью (на вкладке «Диагностика» задачи «Выполнить»).

0 голосов
/ 06 декабря 2011

Как хранится Info.plist?Это стандартный файл plist / xml?Решит ли следующий вопрос проблему, которую вы пытаетесь решить, и, возможно, предотвратит возникновение этой проблемы?

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" 
       ofType:@"plist"];
NSDictionary *loadedPlist = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

Или, если вы хотите автоматически освобожденный объект ...

NSDictionary *loadedPlist = [NSDictionary dictionaryWithContentsOfFile:plistPath];
0 голосов
/ 06 декабря 2011

Вы установили точку останова в malloc_error_break?По крайней мере, это дает вам обратную трассировку, и вы можете увидеть что-то заметное.Если ничего другого, вы можете попробовать po plistData с консоли GDB.

Кстати, хотя это может не помочь, я думаю, dictionaryWithContentsOfFile: будет проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...