数据结构与算法:内存泄漏检查[2]
发表于:2008-04-21来源:作者:点击数:
标签:算法数据结构
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*/ { pLin
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.ltesting.net