2012-06-20 3 views
0

Я использую sqlite3_prepare_v2 в приложении C++ и получаю утечку памяти при создании экземпляра внешней функции sqlite3_stmt, вызывающей sqlite3_prepare_v2.sqlite3_prepare_v2 зависит от области действия

образец:

sqlite3_stmt* ps=NULL; 
void prepare(void) 
{ 
    if(ps == NULL) 
     sqlite3_prepare_v2(&db,"insert into nomatterbd...",-1,&ps,NULL); 

} 

вызов подготовки, закрыть запущенные приложения, и вы получите утечку памяти.

не делая таким образом:

void prepare(void) 
{ 
    sqlite3_stmt* ps=NULL; 
    sqlite3_prepare_v2(&db,"insert into nomatterbd...",-1,&ps,NULL); 
} 

нет утечек памяти. проверено с последней амальгацией.

Моя цель - открыть и закрыть БД для каждой вставки или обновления. Чтобы ускорить работу всего , я хотел бы подготовить глобальные операторы для вставки и обновления. К сожалению, это не удастся, если глобальные и когда-то созданные заявления вызывают утечку памяти.

Может ли кто-нибудь помочь? Спасибо.

+0

Это поможет, если вы можете предоставить ** полную ** программу, которая демонстрирует вашу проблему. Пожалуйста, сохраните ** ** ** (20 строк или меньше). Скопируйте его прямо в вопрос, чтобы мы могли скомпилировать его и посмотреть, получим ли мы те же результаты. См .: http://sscce.org/. –

ответ

0

Вы вызываете sqlite3_finalize()?

http://sqlite.org/c3ref/finalize.html

Ваш вопрос не указывается, когда происходит утечка памяти - я предполагаю, что при выходе из программы.

+0

да, финализирован. В обоих случаях. Forgott добавить к образцу кода. – user947604

+1

Ну, его трудно догадаться, что такое утечка mem, когда в вашем образце кода отсутствуют важные части! – ravenspoint

+0

Прошу прощения за отставание кода. Я делаю сброс, и утечки отображаются в отладочном дампе при закрытии (VS2008). Первый образец кода протекает. Второй нет. В первом примере используется глобальный оператор, второй - нет. – user947604

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