2010-11-11 15 views
1

J'utilise SQLite pour stocker mes données. J'écris classe wrapper, et je veux savoir: sera une fuite de mémoire si (res! = SQLITE_OK) et errorMsg sera affiché à l'écran ??sqlite3_exec Y at-il une fuite de mémoire?

J'ai donc besoin de faire gratuitement (errorMsg); dans la déclaration "if"? Merci!

-(int) executeQuery: (NSString *) sqlQueryStr 
{ 
char *errorMsg = NULL; 
int res = SQLITE_ERROR; 

res = sqlite3_exec(database, [sqlQueryStr UTF8String], NULL, NULL, &errorMsg); 

if (res != SQLITE_OK) 
{ 
    sqlite3_close(database); 
    NSLog(@"executeQuery Error: %@", errorMsg); 
    database = NULL; 
    return res; 
} 

return res; 
} 

Répondre

4

Vous devez utiliser sqlite3_free() pour libérer la chaîne de message d'erreur, selon the documentation:

Pour éviter les fuites de mémoire, l'application devrait invoquer sqlite3_free() sur les chaînes de message d'erreur renvoyées par la 5ème paramètre de sqlite3_exec() après que la chaîne du message d'erreur ne soit plus nécessaire.