56]; ?
? ?
? ?
? ?
?class new_index_recorder{ ?
? ?
?public: ?
? ?
? ? new_index_recorder(char* file, int line) : file(file), line(line){ ?
? ?
? ?
? ?
? ? } ??
? ?
? ? operator char*(){ ?
? ?
? ? ? ? static unsigned int index; ?
? ?
? ? ? ? sprintf(new_index_recorder_file_name[index], "%s(%d) : %d ", file, line, index++); ?
? ?
? ? ? ? return ?new_index_recorder_file_name[index]; ?
? ?
? ? } ?
? ?
?private: ?
? ?
? ? char* file; ?
? ?
? ? int line; ??
? ?
?}; ?
?
?
当然,也可以用函数来返回char*指针
[cpp] ?
int g_count = 0; ?
? ?
?class OperNew ?
?{ ?
?public: ?
? ? OperNew() ?
? ? { ? ??
? ? ? ? g_count ++; ?
? ? ? ? pC = new char[20]; ?
? ? ? ? memset(pC, 0, 10); ?
? ? ? ? sprintf(pC, "No.%d", g_count); ?
? ? } ?
? ? char* GetChar() ?
? ? { ?
? ? ? ? return pC; ?
? ? } ?
?private: ?
? ? char * pC ; ?
?}; ?
?
这样就能返回自定义的内容了。本次的返回加上了一个构造时候的序号,当然也可以添加时间等。结果如下:
e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(95) : 11 (95) : {123} normal block at 0x002B4C78, 400 bytes long.
? Data: < ? ? ? ? ? ? ? ?> CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 10 (92) : {122} normal block at 0x002B4C30, 9 bytes long.
? Data: < ? ? ? ? > CD CD CD CD CD CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 9 (92) : {121} normal block at 0x002B4BE8, 8 bytes long.
? Data: < ? ? ? ?> CD CD CD CD CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 8 (92) : {120} normal block at 0x002B9F88, 7 bytes long.
? Data: < ? ? ? > CD CD CD CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 7 (92) : {119} normal block at 0x002B9F40, 6 bytes long.
? Data: < ? ? ?> CD CD CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 6 (92) : {118} normal block at 0x002B9EF8, 5 bytes long.
? Data: < ? ? > CD CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 5 (92) : {117} normal block at 0x002B9EB8, 4 bytes long.
? Data: < ? ?> CD CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 4 (92) : {116} normal block at 0x002B9E78, 3 bytes long.
? Data: < ? > CD CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 3 (92) : {115} normal block at 0x002B9E38, 2 bytes long.
? Data: < ?> CD CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 2 (92) : {114} normal block at 0x002B9DF8, 1 bytes long.
? Data: < > CD?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(92) : 1 (92) : {113} normal block at 0x002B9DB8, 0 bytes long.
? Data: <> h?
?e:\project\test\test_mem_leak\test_mem_leak\test_mem_leak.cpp(88) : 0 (88) : {112} normal block at 0x002B9D50, 40 bytes long.
? Data: <0L+ ? ? ? ? ? ? > 30 4C 2B 00 CD CD CD CD CD CD CD CD CD CD CD CD?
?Object dump complete.
?程序“[8796] test_MEM_LEAK.exe: 本机”已退出,返回值为 -1073741510 (0xc000013a)。
?
小提示:
将输出文件拷贝到UE中,然后查找泄露行号出现的次数,可以计算出泄露的数目。
?