Obj-c,释放对象的对象检查错误 - 对象可能在被释放后被修改

时间:2011-12-05 21:26:58

标签: iphone objective-c ios cocoa-touch

我收到此错误

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的值设置为Summary Unavailable

我不知道从哪里开始?

编辑 - 添加了更多代码

3 个答案:

答案 0 :(得分:5)

我要添加另一个答案:你也可能已经在堆上了,并且你在propertyListFromData上失败了:只是因为它做了大量的分配而碰巧碰到了坏点。因此,在Xcode中编辑您的方案,并确保已选中所有内存管理项目(在“运行”任务的“诊断”选项卡中)。

答案 1 :(得分:0)

您是否在malloc_error_break中设置了断点?这至少会给你一个回溯,你可能会看到一些注意事项。如果不出意外,您可以从GDB控制台尝试po plistData

顺便说一下,虽然它可能没有帮助,但我认为dictionaryWithContentsOfFile:会更简单。

答案 2 :(得分:0)

如何存储Info.plist?它是标准的plist / xml文件吗?以下是否会解决您尝试解决的问题,并可能防止此问题发生?

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

或者如果你想要一个自动发布的对象......

NSDictionary *loadedPlist = [NSDictionary dictionaryWithContentsOfFile:plistPath];