我想知道指针在调试时保存特定的地址

时间:2014-09-05 13:05:53

标签: c++ memory-leaks

我在输出窗口中使用#define _CRTDBG_MAP_ALLOC进行了内存转储。

检测到内存泄漏!

转储对象 - >
{1078301}正常块位于0x0AB2D840,长度为48个字节。
 数据:< 2 0 1 4 - 0 9 - > 32 00 30 00 31 00 34 00 2D 00 30 00 39 00 2D 00

{975444}正常阻塞位于0x08D21138,长度为36个字节  数据:< = = pa> A4 3D C0 08 B0 3D C0 08 01 00 00 00 70 61 BE 08

{975443}正常阻塞位于0x0CE96610,长度为32个字节  数据:<,X \ pa> 2C 58 C0 08 5C 90 BF 08 01 00 00 00 70 61 BE 08

{975438}正常阻塞位于0x0CE6B1D8,32个字节长  数据:50 90 BF 08 5C 90 BF 08 01 00 00 00 08 E3 D1 08

{736753}正常阻塞位于0x0CEAA878,长度为16384字节  数据:< / /> D8 2F D2 08 D8 2F D2 08 03 00 00 00 00 00 00 00

{736744}正常阻塞位于0x0CEA8838,长度为8192个字节  数据:< 8 8> 38 0B E2 0C 38 88 EA 0C 01 00 00 00 01 00 00 00

{736738}正常阻塞位于0x0CEA47F8,长度为16384字节  数据:< G> 00 00 00 00 F8 47 EA 0C 03 00 00 00 00 00 00 00

{736729}正常阻塞位于0x0CE105A8,长度为8192个字节  数据:<(> 28 14 D1 08 A8 05 E1 0C 01 00 00 00 CD CD CD CD

{736723}正常阻塞位于0x0CEA07B8,长16384字节 数据:< G 8> F8 47 EA 0C 38 88 EA 0C 03 00 00 00 00 00 00 00

{736713}正常阻塞位于0x0CE1E440,长度为8192个字节 数据:< @> A8 05 E1 0C 40 E4 E1 0C 01 00 00 00 CD CD CD CD

{736707}正常阻塞位于0x0CE1A400,长度为16384字节 数据:< > B8 07 EA 0C B8 07 EA 0C 03 00 00 00 00 00 00 00

{736698}正常阻塞位于0x0CE36B18,长度为8192个字节 数据:< @k> 40 E4 E1 0C 18 6B E3 0C 01 00 00 00 CD CD CD CD

{736692}正常阻塞位于0x0CE163C0,长16384字节 数据:< > 00 A4 E1 0C 00 A4 E1 0C 03 00 00 00 00 00 00 00

{736682}正常阻塞位于0x0CE44230,长度为8192个字节 数据:< k 0B> 18 6B E3 0C 30 42 E4 0C 01 00 00 00 CD CD CD CD

{736676}正常阻塞位于0x0CE3E7F8,长度为16384字节 数据:< c c> C0 63 E1 0C C0 63 E1 0C 03 00 00 00 00 00 00 00

{736666}正常阻塞位于0x0CE4B6F0,长度为8192个字节 数据:< 0B> 30 42 E4 0C F0 B6 E4 0C 01 00 00 00 CD CD CD CD

{736660}正常阻塞位于0x0CE3A7B8,长度为16384字节 数据:< > F8 E7 E3 0C F8 E7 E3 0C 03 00 00 00 00 00 00 00

{736650}正常阻塞位于0x0CE47388,长度为8192个字节 数据:< s> F0 B6 E4 0C 88 73 E4 0C 01 00 00 00 CD CD CD CD

{736644}正常阻塞位于0x0CE0C568,长度为16384字节 数据:< > B8 A7 E3 0C B8 A7 E3 0C 03 00 00 00 00 00 00 00

{736634}正常阻塞位于0x0CE20B38,长度为8192个字节 数据:< s 8> 88 73 E4 0C 38 0B E2 0C 01 00 00 00 CD CD CD CD

{736628}正常阻塞位于0x0CE23B70,长度为16384字节 数据:68 C5 E0 0C 68 C5 E0 0C 03 00 00 00 00 00 00 00

{663741}正常阻塞位于0x0CDB6EF0,长度为60个字节 数据:50 F2 BF 08 24 6F C0 08 01 00 00 00 30 75 00 00

{1923}正常阻塞位于0x08D20DE8,长度为8个字节 数据:< @] d> 40 5D BE 08 64 C0 D1 08

{1922}正常阻塞位于0x08D22E10,长56个字节 数据:70 5C BE 08 00 00 00 00 CD CD CD CD E8 0D D2 08

{1900}正常阻塞位于0x08D27018,长16384字节 数据:< > F0 E2 D1 08 F0 E2 D1 08 03 00 00 00 00 00 00 00

{1894}正常阻塞位于0x08D22FD8,长度为16384字节 数据:70 3B E2 0C 70 3B E2 0C 03 00 00 00 00 00 00 00

{1883}正常阻塞位于0x08D22900,长144个字节 数据:43 00 3A 00 5C 00 55 00 73 00 65 00 72 00 73 00

对象转储完成。

现在debegger击中了断点。在观察窗口中,在debuging时我在名称columm中添加{,, msvcr100d.dll} _crtBreakAlloc,并添加内存位置736723,这是上面在值columm中提到的转储中的内存块编号。这种泄漏发生在循环的函数中。

当我继续调试时,它会在监视窗口see fig 1中输入的内存块编号中断 在窗口按下休息 见图2  _CrtDbgBreak保存内存泄漏发生的0x69595280.thats

现在,我如何在调试时了解保存特定地址loaction的指针。

先谢谢 Avinash V

1 个答案:

答案 0 :(得分:0)

程序已经中断了,所以你应该去Visual Studio中的调用堆栈窗口并在那里找到源代码,然后你可以找到调用内存分配函数的源代码,这就是你要查找的内容对

当您使用分配编号跟踪内存泄漏时,如果程序在以前的条件下运行,分配编号可能会发生变化。请参阅:Finding Memory Leaks Using the CRT Library