valgrind內(nèi)存泄漏檢測(cè) QTcreator下用valgrind進(jìn)行內(nèi)存檢測(cè)時(shí)報(bào)錯(cuò)?
QTcreator下用valgrind進(jìn)行內(nèi)存檢測(cè)時(shí)報(bào)錯(cuò)?Valgrind MemCheck工具的用法如下:Valgrind--tool=MemCheck。/從上面的命令中,我們可以清楚地看到主命令是
QTcreator下用valgrind進(jìn)行內(nèi)存檢測(cè)時(shí)報(bào)錯(cuò)?
Valgrind MemCheck工具的用法如下:Valgrind--tool=MemCheck。/從上面的命令中,我們可以清楚地看到主命令是Valgrind,我們想要使用的工具是由“-tool”選項(xiàng)指定的。上面的“a.out”指的是我們想要用MemCheck運(yùn)行的可執(zhí)行文件。此工具可以檢測(cè)以下與內(nèi)存相關(guān)的問題:未釋放內(nèi)存的使用、釋放內(nèi)存的讀/寫、分配內(nèi)存塊末尾的讀/寫內(nèi)存泄漏、使用malloc/new/new[]和free/delete/delete[]重復(fù)釋放內(nèi)存注:以上列表不是很全面,但是它包含許多可以被工具檢測(cè)到的常見問題。讓我們逐一討論上面的場(chǎng)景:注意:下面討論的所有測(cè)試代碼都應(yīng)該使用GCC和-G選項(xiàng)編譯(用于在MemCheck的輸出中生成行號(hào))。正如我們之前討論過的,一年前由0人翻譯的Tob Rambo Bay。這是一個(gè)很好的翻譯。1使用未初始化的內(nèi)存代碼:。我的程序一直將數(shù)據(jù)存儲(chǔ)在SQLite數(shù)據(jù)庫(kù)中,因此代碼中沒有關(guān)閉的數(shù)據(jù)庫(kù)。SQLite數(shù)據(jù)庫(kù)總是開放的,這不合理嗎?如何將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)而不泄漏?謝謝你的建議!當(dāng)您打開數(shù)據(jù)庫(kù)進(jìn)行讀寫操作時(shí),當(dāng)內(nèi)存沒有釋放時(shí)是正確的。如果你關(guān)閉數(shù)據(jù)庫(kù)而不釋放內(nèi)存,那就真的是一個(gè)漏洞。Valgrind是一個(gè)GPL軟件,用于Linux(用于x86、AMD64和ppc32)程序的內(nèi)存調(diào)試和代碼分析。你可以在它的環(huán)境中運(yùn)行你的程序來(lái)監(jiān)視內(nèi)存使用情況,比如C中的malloc和free或者C中的new和delete。使用Valgrind的工具箱,你可以自動(dòng)檢測(cè)許多內(nèi)存管理和線程錯(cuò)誤,避免花費(fèi)太多時(shí)間尋找錯(cuò)誤,并使你的程序更穩(wěn)定。Valgrind的主要功能是Valgrind工具箱包含多個(gè)工具,如MemCheck、cacheprint、helgrind、callgrind和massif。分別介紹了以下工具的功能:MemCheck工具主要檢查以下程序錯(cuò)誤:使用未初始化內(nèi)存,釋放后使用讀寫內(nèi)存,使用讀取/注銷malloc的dblocks的結(jié)尾非法訪問堆棧是否存在內(nèi)存泄漏–其中指針tomalloc的dblocksarelost forever)malloc/free/new/delete匹配(malloc/new/new[]vsfree/delete[]overlap SRC和DST不匹配)