1.问题
在用VS2015写C++程序过程中发现,分配的内存空间经过数据拷贝后,在free的时候,出现以下错误:
C++ heap corruption dection,CRT detected that the application wrote to memory after end of heap buffer
2.问题的分析和解决
这是典型的内存溢出错误,虽然报错在内存释放的地方,但实际上内存溢出的地方显然不在这一行,而是在内存赋值和拷贝的地方。这里就需要检测在赋值的哪一行出了内存溢出的问题。测试方法如下:
#include <stdlib.h>
#include <crtdbg.h>
#include <iostream>
#define CRTDBG_MAP_ALLOC
然后在数据拷贝部分加入如下代码:
_ASSERTE(_CrtCheckMemory()); //可以定位内存泄露的行
这样,不用等到内存释放,在内存拷贝获填充时,在内存越界的地方就会报错,从而定位内存泄漏的地方。
网友评论