2010-11-11 144 views
1

我正在使用SQLite来存储我的数据。我正在编写包装类,我想知道:如果(res!= SQLITE_OK)和errorMsg将显示在屏幕上,将会发生内存泄漏?sqlite3_exec是否有内存泄漏?

所以我需要做免费(errorMsg);在“如果”声明中?感谢名单!

-(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; 
} 

回答

4

您应该使用sqlite3_free()发布错误消息字符串,按the documentation

为了避免内存泄漏,应用程序 应该在错误 消息字符串调用sqlite3_free()通过 返回sqlite3_exec() 的第5个参数在错误消息字符串没有 之后需要更长的时间。