2012-03-04 11 views
7

me sale este mensaje "heap corruption detected" después de ejecutar este código:corrupción de montón detectado | 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; 
} 

Así es como yo llamo el método:

uli x; 
x = "9876123"; 

¿Qué significa "daños en la pila detectado" significa?

+2

Use 'delete [] buffer'. –

+0

Tienes pensado utilizar un objeto para manejar la memoria. Tal vez una std :: string en lugar de un char *. –

+1

no soy tan bueno – Jonas

Respuesta

14

"Heap corruption" generalmente significa que ha escrito en la memoria no asignada, dañando las estructuras de datos utilizadas para que funcione el asignador de memoria.

Puede haber más problemas, pero el primero que veo es en esta línea:

strcpy(buffer, n); 

Esto escribirá strlen(n) + 1 bytes a buffer, pero buffer es sólo strlen(n) bytes de longitud (el byte adicional es la terminación \0). Escribir ese byte extra da como resultado un comportamiento indefinido, y puede corromper el montón.

+0

Ya veo. gracias. – Jonas

+0

¡De nada! Acepte la respuesta cuando el sitio lo permita. –

+2

Además, no se pierda el comentario de Ates Goral. Si asigna con 'new []', * debe * liberar con 'delete []'. –

Cuestiones relacionadas