NSSsortingng déborde de son tampon et l'application a planté. Le débogueur ne voit aucune information de trace de la stack. Mais pourquoi?

J'ai passé beaucoup de time à découvrir pourquoi mon application s'est écrasée. Ma variable de comptage n'est pas correctement initialisée dans certains cas.

NSSsortingng déborde de son tampon et l'application a planté. Le débogueur ne voit aucune information de trace de la stack. Mais pourquoi?

int count = 2147483647; NSSsortingng *lines = @""; for(int i = 0; i < count; i ++) { lines = [NSSsortingng ssortingngWithFormat:@"%@%@", lines, @"\n"]; } 

MISE À JOUR: Pourquoi le débogueur ne montre-t-il aucune information de trace de la stack?

Vous créez non seulement de longues strings, mais vous créez beaucoup de strings. Chaque appel à +ssortingngWithFormat: crée une nouvelle string d'un caractère ( '\n' ) plus longue que celle précédente. Ces strings sont autoeleased mais le pool autorelease n'est jamais drainé, donc vous remplissez la memory avec un grand nombre de strings comme @"\n" , @"\n\n" , @"\n\n\n" , @"\n\n\n\n" , et ainsi de suite. Vous plantez probablement à partir de ce moment avant d'atteindre une limite de taille de tampon interne (s'il y en a une) dans NSSsortingng.

Utilisez ceci pour savoir jusqu'où vous arrivez:

 int count = 2147483647; NSSsortingng *lines = @""; for (int i = 0; i < count; i++) { @try { lines = [lines ssortingngByAppendingSsortingng:@"\n"]; } @catch (NSException *ex) { NSLog(@"end after %d loops (%@)", i, [ex description]); } }