簡體   English   中英

內存泄漏:驗證塊類型

[英]Memory leak: verify block type

我遇到內存泄漏問題和最低代碼,如下所示。 我的編譯器是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。

因此,有什么錯誤? 謝謝。

當您在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;    // <<-----
        }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM