我遇到内存泄漏问题和最小代码如下。我的编译器是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;
}
错误或警告是
dbgdel.cpp中的_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-&GT; nBlockUse));
行:52。
因此,错误是什么?感谢。
答案 0 :(得分:0)
当你删除Memory_Leak_Test
中的指针时,你没有将指针设置为NULL,所以你的析构函数会尝试再删除它
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_;
feature_vector = NULL; // <<-----
}
}
}