Necesito un refresco de C++. ¿Por qué esto da una excepción de memoria?char * nuevo y eliminar [] error cuando se asigna una cadena
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
Necesito un refresco de C++. ¿Por qué esto da una excepción de memoria?char * nuevo y eliminar [] error cuando se asigna una cadena
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
Memoria para 1024 se asigna el carácter del montón y pear
apunta al comienzo de la misma.
pear = "happy go lucky";
pear
ahora apunta a la cadena literal que reside en el segmento de sólo lectura y la memoria asignada previamente se filtró.
delete [] pear;
Intenta liberar la cadena de solo lectura, que es un comportamiento indefinido que se manifiesta como una excepción de tiempo de ejecución.
AH! Así es ... gracias. – Jake
pera = "Happy Go Lucky";
Este reemplaza el puntero asignado por new char[]
. Así que ahora su delete[] pear
intenta liberar la cadena estáticamente asignada.
Eso es malo. Solo puede delete
lo que asigna con new
. Y ya que sobrescribió (y perdió) ese puntero, no puede delete
.
+1 porque fue el primero – Jake
Lo que está haciendo es asignar pear
a una matriz asignada de caracteres en el montón, y luego reasignarlo para que apunte a la cadena que está en una ubicación estática. Si intentas eliminar eso, se producirá un error porque no se supone que debas eliminar cosas en esa ubicación estática.
es la primera línea igual a 'char * pera = new char [1024];'? –