例項介紹利用valgrind定位記憶體洩漏問題

2021-09-10 18:37:12 字數 1581 閱讀 4766

在前面的文章中, 我們簡單了解了valgrind工具的用途以及安裝, 以便大家能進行實際操作。 在本文中, 我們通過例項來看看如何利用valgrind來定位記憶體洩漏問題。 先看程式:

#include

#include

char* getmemory

()int

main

()

只要是懂一點c/c++的人, 就很容易看出上述程式有記憶體洩漏, 我們用valgrind工具來檢測下:

我們可以很清楚地看到, 在getmemory呼叫malloc的那裡, 有記憶體洩漏。最左邊的19226表示程序號!

不過, 這樣看著也挺蛋疼的, 如果**過多, 肉眼據不太好分析了, 能不能把記憶體洩漏的**行給找出來呢? 當然能! 回想一下我們之前介紹過得core dump定位到**行的問題, 兩個必要條件是:  編譯時必須有-g引數; 編譯後不能strip.  我們一起再看看:

好了, 洩漏的**行出來了。 這裡, 我順便說說以往介紹過得addr2line命令, 如果用addr2line -e a.out 0x4005b5,  也是能得出**行的。

fix後的**如下:

#include

#include

char* getmemory

()int

main

()  return

0;}

我們再用valgrind工具檢測一下:

可見, 沒有記憶體洩漏了。 爽爽噠

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

在前面的文章中, 我們簡單了解了valgrind工具的用途以及安裝, 以便大家能進行實際操作。 在本文中, 我們通過例項來看看如何利用valgrind來定位記憶體洩漏問題。 先看程式:

#include

#include

char* getmemory

()int

main

()

只要是懂一點c/c++的人, 就很容易看出上述程式有記憶體洩漏, 我們用valgrind工具來檢測下:

我們可以很清楚地看到, 在getmemory呼叫malloc的那裡, 有記憶體洩漏。最左邊的19226表示程序號!

不過, 這樣看著也挺蛋疼的, 如果**過多, 肉眼據不太好分析了, 能不能把記憶體洩漏的**行給找出來呢? 當然能! 回想一下我們之前介紹過得core dump定位到**行的問題, 兩個必要條件是:  編譯時必須有-g引數; 編譯後不能strip.  我們一起再看看:

好了, 洩漏的**行出來了。 這裡, 我順便說說以往介紹過得addr2line命令, 如果用addr2line -e a.out 0x4005b5,  也是能得出**行的。

fix後的**如下:

#include

#include

char* getmemory

()int

main

()  return

0;}

我們再用valgrind工具檢測一下:

可見, 沒有記憶體洩漏了。 爽爽噠

例項介紹利用valgrind定位記憶體洩漏問題

不過,這樣看著也挺蛋疼的,如果 過多,肉眼據不太好分析了,能不能把記憶體洩漏的 行給找出來呢?當然能!回想一下我們之前介紹過得core dump定位到 行的問題,兩個必要條件是 編譯時必須有 g引數 編譯後不能strip.我們一起再看看 fix後的 如下 include include char g...

valgrind簡單使用介紹

valgrind tool memcheck yourprogramvalgrind tool helgrind yourprogram指定log輸出檔案,有時候不想程式的列印輸出和valgrind的報告資訊混雜在一起輸出,指定該檔案就可以得到僅包含valgrind報告資訊的檔案 log file ...

利用Oracle的Job Queue實現定時操作

1 確保oracle的工作模式允許啟動佇列管理器 snp程序 svrmgrl alter system enable restricted session 或 sql alter system disenable restricted session 2 確保oracle已配置任務佇列管理器的啟動引...