數據結構與算法:內存泄漏檢查[2]
關鍵字:數據庫設計 voidGC_CheckMemoryLeak(){
void*p;
HashTable_EnumBegin(g_pTable);
while((p=HashTable_EnumNext(g_pTable))!=NULL)
{
INT*pRef;
INT*pSize;
INT*pLine;
char*pszFile;
pRef=(INT*)p;
pSize=pRef+1;
if(*pRef !=0) /*判斷引用計數是否為0*/
{
pLine=(INT*)((char*)p+*pSize+DOUBLE_INT_LEN);
pszFile=(char*)pLine+INT_LEN;
printf("File:%s,Line:%dhavememoryleak.\n",pszFile,*pLine);
}
}
}
注意:程序中使用了printf()函數將文件名和行號打印出來,這里使用printf()函數只是做一個示意,實際應用中可能需要改成其他類型的信息輸出函數。
可以使用函數調用來實現在程序退出時自動調用GC_CheckMemory()函數。
atexit(GC_CheckMemoryLeak);
這里使用了C標準庫的atexit()函數,這個函數是在整個程序退出時調用它的參數指向的函數來執行,但是調用的時間比全局變量的釋放要早,所以如果使用了全局變量,全局變量也被當作泄漏報告出來。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/