JMarsh
JMarsh

Reputation: 954

Getting "malloc: *** error: incorrect checksum for freed object" inconsistently

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

Answers (2)

Daij-Djan
Daij-Djan

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

Pedro Soares
Pedro Soares

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.

Scheme definition

Upvotes: 3

Related Questions