Je reçois constamment erreur malloc: deux .... libéréerreur malloc et simulateur accident
La fonction echoTime
est appelé par un bouton. Lorsque j'appuie à nouveau sur le bouton avant la fin de la minuterie, cela me donne l'erreur malloc. Lorsque j'appuie sur le bouton après la fin de la minuterie pour le redémarrer, le simulateur se bloque.
Est-ce que quelqu'un sait ce qui ne va pas avec le morceau de code suivant:
-(IBAction)echoTime: (id) sender {
if (gameTimer != nil) {
[gameTimer invalidate];
[gameTimer release];
}
NSInteger secs = 1 * 60;
if (secs != 0) {
NSNumber *elapsedSeconds = [[NSNumber alloc] initWithInt:secs];
NSDictionary *myDict = [NSDictionary dictionaryWithObject:elapsedSeconds forKey:@"TotalSeconds"];
gameTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(echoIt:) userInfo:myDict repeats: YES];
}
}
-(void)echoIt: (NSTimer *) timer {
NSNumber *num = (NSNumber *) [[timer userInfo] valueForKey:@"TotalSeconds"];
seconds++;
NSInteger sec = [num integerValue] - seconds;
NSInteger minutes = sec/60;
[gameTimeLabel setText:[NSString stringWithFormat:@"%02i:%02i", minutes, sec-(60*minutes)]];
if (sec == 0) {
[self playSound:@"Horn"];
[gameTimer invalidate];
}
}
Cela empêche une fuite de mémoire mais ne résout pas le problème d'un double-libre. –
Ne pas libérer le gameTimer, vous ne l'avez jamais conservé. La boucle d'exécution le possède et l'invalidation se déclenchera automatiquement. –