2012-04-26 12 views

Respuesta

9
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.

+0

AH! Así es ... gracias. – Jake

5

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.

+0

+1 porque fue el primero – Jake

2

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.

Cuestiones relacionadas