C C 記憶體洩漏檢測方法

2022-07-05 22:33:10 字數 2294 閱讀 5335

1. 記憶體洩漏

記憶體洩漏(memory leak)是指程式中已動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。

2. 檢測**

使用鍊錶記錄每個malloc返回的指標,釋放時從鍊錶中查詢並刪除找到對應指標的節點。

最終輸出鍊錶,該鍊錶記錄了所有沒有釋放的動態記憶體。

#include #include 

#include

#include

#include

#include

#include

#define output_file "leak_detector_report.txt"typedef

struct

addr_info;

typedef

struct

addr_info_nodeaddr_info_node, *addr_info_list;

pthread_mutex_t g_mutex =pthread_mutex_initializer;

addr_info_list g_head =null;

void *malloc_detector(int size, unsigned char *file, unsigned int

line)

addr_info_node *node = (addr_info_node*)malloc(sizeof

(addr_info_node));

if (null ==node)

memset(node,

0, sizeof

(addr_info_node));

node->info.addr =ptr;

node->info.line =line;

node->info.size =size;

strncpy(node->info.file,file,127

); node->next =null;

pthread_mutex_lock(&g_mutex);

if (null ==g_head)

memset(g_head,

0, sizeof

(addr_info_node));

} addr_info_node *tail =g_head;

while (null != tail->next)

tail->next =node;

pthread_mutex_unlock(&g_mutex);

return

ptr;

}void free_detector(void *addr)

printf(

"2 file %s line %d,addr %p,size %d\n",

node->info.file,node->info.line,node->info.addr,node->info.size);

node = node->next;

}pthread_mutex_unlock(&g_mutex);

} void

report_info()

char info[sizeof(addr_info)+128

];

pthread_mutex_lock(&g_mutex);

addr_info_node *node = g_head->next;

while (null !=node)

fclose(fp_write);

pthread_mutex_unlock(&g_mutex);

}void

thread1_malloc_free()

void

thread2_malloc_free()

intmain()

執行輸出

memory leak:file memory_detector.c line 115,addr 0x7f88c0000b60,size 100

memory leak:file memory_detector.c line

123,addr 0x7f88b8000b60,size 400

memory leak:file memory_detector.c line

118,addr 0x7f88c0001120,size 200

memory leak:file memory_detector.c line

126,addr 0x7f88b8001170,size 1600

C C 程式記憶體洩漏檢測

c c 程式記憶體洩漏檢測 摺疊 1.包含標頭檔案和定義 define crtdbg map alloc include include 如果定義了 crtdbg map alloc,列印出來的是檔名和行數等更加直觀的資訊。2.方法一 在程式入口寫幾個語句 int tmpflag crtsetdbg...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般 最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的 reboot才會...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的reboot才會正常...