| C++

2012-03-04 8 views
7

ottengo questo messaggio "heap corruption detected" dopo l'esecuzione di questo codice:| C++

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

Questo è come io chiamo il metodo:

uli x; 
x = "9876123"; 

Che cosa significa "mucchio corruzione rilevato" significa?

+2

Utilizzare 'delete [] buffer'. –

+0

Hai pensato di utilizzare un oggetto per gestire la memoria. Forse una std :: string invece di un char *. –

+1

non sono così bravo – Jonas

risposta

14

"Heap corruption" significa in genere che hai scritto nella memoria non allocata, danneggiando le strutture dati utilizzate per far funzionare l'allocatore di memoria.

Ci possono essere più problemi, ma il primo che vedo è su questa linea:

strcpy(buffer, n); 

Questo scriverà strlen(n) + 1 byte buffer, ma buffer è lungo solo strlen(n) byte (il byte in più è la terminazione \0.) La scrittura di quel byte in più comporta un comportamento indefinito e potrebbe corrompere l'heap.

+0

Vedo. grazie. – Jonas

+0

Prego! Accetta la risposta quando il sito ti consente di farlo. –

+2

Inoltre, non perdete il commento di Ates Goral. Se assegnate con 'new []', * dovete * liberare con 'delete []'. –