0
我遇到内存泄漏问题和最小代码如下。我的编译器是VS2008。内存泄漏:验证块类型
//haar.h
#include "stdio.h"
#include "stdlib.h"
class HaarClass
{
public:
HaarClass(void);
~HaarClass(void);
void Memory_Leak_Test();
private:
long* feature_vector_;
};
HaarClass::HaarClass(void)
{
feature_vector_ = NULL;
}
HaarClass::~HaarClass(void)
{
if (feature_vector_ != NULL) {
delete[] feature_vector_;
}
}
void HaarClass::Memory_Leak_Test(){
if (feature_vector_!=NULL) {
delete[] feature_vector_;
}
for (int i=0; i<10; i++)
{
feature_vector_ = new long[100];
if (feature_vector_!=NULL) {
delete[] feature_vector_;
}
}
}
和主文件是
//main.cpp
#include <cstdio>
#include "haar.h"
int main()
{
HaarClass a;
a.Memory_Leak_Test();
return 0;
}
而错误或警报是
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse));
在dbgdel.cpp线:52
因此,有什么错误?谢谢。
认为在这个问题中的代码不能满足的要求[ MCVE。除非编辑这个问题,并提供[mcve],否则不可能有答案。 –
'if(feature_vector _!= NULL)' - 你在使用什么编译器?如果'new []'失败,则引发'std :: bad_alloc'异常,并且不返回NULL。 – PaulMcKenzie
请发布[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。第一个'if(feature_vector _!= NULL){delete [] feature_vector_; }'?在调用这个函数之前,'feature_vector_'初始化为'NULL'还是指向已分配缓冲区的指针,并且未正确删除? – MikeCAT