2009-11-19 3 views
0

У меня очень странная проблема с утечкой памяти, похоже, что sqlite3_step делает некоторые неприятные вещи: |странный iphone sdk sqlite утечка памяти

Я провел почти 4 часа, пытаясь исправить это, но не везло до сих пор :(

Вот это код:

[dbList removeAllObjects]; 

sqlite3_stmt *statement = nil; 
const char *sql = "SELECT * FROM dbs ORDER by rowOrder;"; 
if (sqlite3_prepare_v2(dbHandler, sql, -1, &statement, NULL) == SQLITE_OK) 
{  
    while (sqlite3_step(statement) == SQLITE_ROW) 
    { 

     DatabaseEntry *entry = [[DatabaseEntry alloc] init]; 

     entry.databaseID = sqlite3_column_int(statement, 0); 
     entry.databaseTitle = [NSString stringWithFormat:@"%s", (char *)sqlite3_column_text(statement, 1)]; 
     entry.databaseProtected = sqlite3_column_int(statement, 3); 
     entry.databaseFileName = [NSString stringWithFormat:@"%s", (char *)sqlite3_column_text(statement, 2)]; 
     entry.databaseOrder = sqlite3_column_double(statement, 4); 

     [dbList addObject:entry]; 
     [entry release]; 
    } 

} 
sqlite3_finalize(statement); 

Проблема, кажется, с моим запросом, если я удалить «ПРИКАЗ от rowOrder» части, кажется, что все будет хорошо, и я использую sqlcipher, и мне интересно, если это может привести к этой утечке?!

Спасибо большое за внимание !!!

ответ

2

Обновление: Эй, Энди, я ошибся. Я начал изучать это более внимательно после выполнения некоторых сценариев утечек. Похоже, что плохое слияние с исходным источником SQLite пропустило два вызова очистки пейджера. Проблема привела к тому, что кеш-страница оставалась выделенной после закрытия пейджера. Вероятно, это не повлияет на большинство программ, но я бы по-прежнему определенно рекомендовал выпустить последний исходный код, который исправляет проблему с GitHub по адресу http://github.com/sjlombardo/sqlcipher

+0

hmm, thats great to know, thank you! – Andy

+0

Спасибо, я возьму новый исходный код! Спасибо, что посмотрели в него :) – Andy

Смежные вопросы