0
Ich trete ein Speicherverlustproblem und der Mindestcode wie folgt. Mein Compiler ist VS2008.Speicherleck: Verify Block Typ
//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_;
}
}
}
Und die Hauptdatei ist
//main.cpp
#include <cstdio>
#include "haar.h"
int main()
{
HaarClass a;
a.Memory_Leak_Test();
return 0;
}
Und der Fehler oder die Warnung ist
_ASSERTE (_BLOCK_TYPE_IS_VALID (pHead-> nBlockUse));
in dbgdel.cpp Line: 52.
Was also ist der Fehler? Vielen Dank.
Der Code, der in dieser Frage gezeigt hat nicht den Anforderungen eines erfüllen [ mcve]. Wenn diese Frage nicht bearbeitet wird und ein [mcve] bereitgestellt wird, ist keine Antwort möglich. –
'if (feature_vector _! = NULL)' - Welchen Compiler benutzen Sie? Wenn 'new []' fehlschlägt, wird eine 'std :: bad_alloc' Ausnahme ausgelöst, und es wird kein NULL zurückgegeben. – PaulMcKenzie
Bitte veröffentlichen Sie ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve). Was ist der Zweck des ersten 'if (feature_vector _! = NULL) {delete [] feature_vector_; } '? ist 'feature_vector_' initialisiert auf' NULL' oder Zeiger auf Puffer reserviert und nicht ordnungsgemäß gelöscht, bevor diese Funktion aufgerufen wird? – MikeCAT