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
因此,有什麼錯誤?謝謝。
認爲在這個問題中的代碼不能滿足的要求[ MCVE。除非編輯這個問題,並提供[mcve],否則不可能有答案。 –
'if(feature_vector _!= NULL)' - 你在使用什麼編譯器?如果'new []'失敗,則引發'std :: bad_alloc'異常,並且不返回NULL。 – PaulMcKenzie
請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。第一個'if(feature_vector _!= NULL){delete [] feature_vector_; }'?在調用這個函數之前,'feature_vector_'初始化爲'NULL'還是指向已分配緩衝區的指針,並且未正確刪除? – MikeCAT