使用 _malloc_dbg 即可
使用方式:
char *p1, *p2;
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
// Explicitly call _malloc_dbg to obtain the filename and
// line number of our allocation request and also so we can
// allocate CLIENT type blocks specifically for tracking
p1 = (char*)_malloc_dbg(22, _NORMAL_BLOCK, __FILE__, __LINE__);
p2 = (char*)_malloc_dbg(80, _NORMAL_BLOCK, __FILE__, __LINE__);
strcpy_s(p1, 40, "p1 points to a Normal allocation block");
strcpy_s(p2, 40, "p2 points to a Client allocation block");
free(p2);
free(p1);
这块可以看到 分配内存 p1 是 22 字节,使用了 40 那么就有错误提示:
按照提示即可正确的找到分配内存出错的地方
这个是最简单便捷的方法,更多方法参见:
https://github.com/microsoft/VCSamples/blob/9e1d4475555b76a17a3568369867f1d7b6cc6126/VC2010Samples/crt/crt_dbg1/crt_dbg1.c