内存泄漏:检查块类型

Memory leak: verify block type

本文关键字:类型 检查 泄漏 内存      更新时间:2023-10-16

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

in dbgdel.cpp Line: 52.

那么,误差是多少呢?谢谢。

当你在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;    // <<-----
        }
    }
}