2016-08-17 66 views
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

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

+6

認爲在這個問題中的代碼不能滿足的要求[ MCVE。除非編輯這個問題,並提供[mcve],否則不可能有答案。 –

+1

'if(feature_vector _!= NULL)' - 你在使用什麼編譯器?如果'new []'失敗,則引發'std :: bad_alloc'異常,並且不返回NULL。 – PaulMcKenzie

+0

請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。第一個'if(feature_vector _!= NULL){delete [] feature_vector_; }'?在調用這個函數之前,'feature_vector_'初始化爲'NULL'還是指向已分配緩衝區的指針,並且未正確刪除? – MikeCAT

回答

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

    } 

}