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 100memory 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才會正常...