内存泄漏:验证块类型

时间:2016-08-17 01:16:18

标签: c++ memory-leaks

我遇到内存泄漏问题和最小代码如下。我的编译器是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-&GT; nBlockUse));

dbgdel.cpp中的

行:52。

因此,错误是什么?感谢。

1 个答案:

答案 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;    // <<-----
        }

    }

}