Obj-c, incorrect checksum for freed object - objec

2019-08-30 01:13发布

I'm getting this error

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

It comes from this line

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

The value of plistData is set to Summary Unavailable

I'm not sure where to start ?

EDIT - added more code

3条回答
手持菜刀,她持情操
2楼-- · 2019-08-30 01:53

Have you set a breakpoint in malloc_error_break? This at least gives you a backtrace and you might see something of note. If nothing else, you could try po plistData from the GDB console.

BTW, while it may not help, I'd think dictionaryWithContentsOfFile: would be simpler.

查看更多
smile是对你的礼貌
3楼-- · 2019-08-30 01:58

I'm going to add another answer: it's also possible that you have ALREADY hosed the heap, and you're failing on propertyListFromData: just because it does a lot of allocations and happens to hit the bad spot. So edit your scheme in Xcode, and make sure you have all of the Memory Management items checked (in the Diagnostics tab of the Run task).

查看更多
相关推荐>>
4楼-- · 2019-08-30 01:58

How is Info.plist being stored? Is it a standard plist/xml file? Would the following solve the problem you are trying to solve, and possibly prevent this issue from happening?

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

Or if you want an auto-released object...

NSDictionary *loadedPlist = [NSDictionary dictionaryWithContentsOfFile:plistPath];
查看更多
登录 后发表回答