2012-06-20 34 views
0

我在C++應用程序中使用sqlite3_prepare_v2並獲取內存泄漏,當實例化一個 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