Reputation: 954
The full error is:
app(85540,0x38661a8) malloc: *** error for object 0x11214f84:
incorrect checksum for freed object - object was probably modified after being freed.
So I'm getting something that is quite hard to replicate and I suspect is has something to do with the way I have my block set up. What I'm trying to get is the current online status of gamers on Xbox Live, so I allocate 2 NSMutuableDictionaries
in viewDidLoad
. onlinePlayers
is for holding the online status values of the gamers so it's not checked over and over again in cellForRowAtIndexPath
when scrolling up and down. checkedPlayers
is to prevent multiple calls going out trying to get the status of the same player. Anyway, if I keep launching the simulator over and over again, it will be fine 29/30 launches, but it always crashes at least once on launch with the above error when I'm trying to set the online status value for a gamer:
NSString* gamertag = cell.gamerTagLabel.text;
if (![_checkedPlayers containsObject:gamertag]) {
[_checkedPlayers addObject:gamertag];
[Utilities processJSONDataWithGamertag:gamertag andBlock:^(NSData *jsonData) {
id onlineStatus;
NSDictionary *allXboxAttributes = [Utilities returnJSONObject:jsonData];
// Get current Xbox Live Data
if ([allXboxAttributes objectForKey:@"data"]) {
NSDictionary *dataXboxAttributes = [allXboxAttributes objectForKey:@"data"];
onlineStatus = [dataXboxAttributes objectForKey:@"online"];
// Crashes on the line below
[_onlinePlayers setObject:onlineStatus forKey:gamertag];
// Return to main thread and update online status
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}];
}
If it helps for some reason, the value being returned from dataXboxAttributes
is a BOOL
. Any help would be much appreciated. Thanks!
Upvotes: 0
Views: 2292
Reputation: 50109
from your code it looks like the completion block of processJSON isnt always on the main thread, synchronize access to onlinePlayers.
@synchronized
will do I guess
Upvotes: 1
Reputation: 1195
You are getting the error in that method but the problem might be elsewhere.
To find the source of the problem, in XCode go to Product > Scheme > Edit Scheme, and under Diagnostics tab enable all the Malloc settings and Guard Malloc.
With that, run your application again, and XCode will stop at the line causing the problem.
Upvotes: 3