Il y a une fuite de mémoire dans mon programme et parce que je ne connais pas bien C (créé une fonction dans ma classe Objective-C pour charger des chaînes à partir d'une base de données SQLite). Quelqu'un peut-il repérer ma gaffe? Merci:Question de gestion de mémoire simple en Objective-C
static int MyCallback(void *context, int lCount, char **values, char **columns){
NSMutableArray *sqlRawStrings = (NSMutableArray *)context;
for (int i = 0; i < lCount; i++) {
const char *nameCString = values[i];
if (nameCString != NULL) {
[sqlRawStrings addObject:[NSString stringWithUTF8String:nameCString]];
}
}
return SQLITE_OK;
}
Tout cela est appelé plus tôt ici:
int numberA = [loadBundleNumber intValue];
char str1[130] = "select ";
for(int i = 7; i <7 + numberA; i++){
str1[i] = 'a';
}
char str2[20] = " from puzzles";
strcat(str1,str2);
NSString *file = [[NSBundle mainBundle] pathForResource:@"finalPuzzles" ofType:@"db"];
sqlite3 *database = NULL;
if (sqlite3_open([file UTF8String],&database) == SQLITE_OK) {
sqlite3_exec(database, str1, MyCallback, sqlRawStrings, NULL);
}
sqlite3_close(database);
Merci
C'est l'objectif C, qui est une chose différente de C. – Juliano
Bien que je ne sois pas très versé, mais je peux sérieusement voir que vous ne détruisez pas les choses une fois utilisées. – Neutralizer
avez-vous envisagé de créer un lien avec un outil de gestion de la mémoire qui va remplacer malloc/free, etc? Laissons l'outil faire le travail et il trouvera probablement des sous-titres obscruraux que même la révision de code pourrait manquer (en fait, même le lissage, avec Splint) pourrait signaler des problèmes de soem) – Mawg