heap-Beschädigung erkannt | C++
Bekomme ich diese " heap corruption detected
" - Nachricht nach dem ausführen dieses Codes :
uli& uli::operator =(char* n)
{
char* buffer = new char[strlen(n)];
char* p;
int op;
int coef;
strcpy(buffer, n);
while(*buffer)
{
op = strlen(buffer) - 5;
p = (op >= 0) ? op+buffer : buffer;
coef = atoi(p);
if(coef > 65535)
coef = atoi(++p);
push(head, coef);
*p = '\0';
}
delete buffer; // <- heap corruption detected
return *this;
}
Dies ist, wie ich die Methode aufrufen:
uli x;
x = "9876123";
Was bedeutet "heap-Beschädigung erkannt" bedeuten ?
- Verwenden
delete [] buffer
. - Haben Sie aber über ein Objekt mit dem Speicher. Vielleicht ein std::string statt char*.
- ich bin nicht so gut
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Heap corruption" bedeutet in der Regel, die Sie schrieb in den nicht zugewiesenen Speicher, Beschädigung von Datenstrukturen, die verwendet werden, um die Speicher-Zuweisung arbeiten.
Kann es mehr Probleme, aber die erste, die ich sehe, ist auf dieser Linie:
Diesem schreiben
strlen(n) + 1
bytesbuffer
, aberbuffer
ist nurstrlen(n)
Byte lang sein (das zusätzliche byte ist die Kündigung\0
.) Das schreiben die extra-byte-Ergebnisse zu undefiniertem Verhalten, und kann auch korrupte heap.new[]
Sie muss kostenlos mitdelete[]
.