Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Por favor, mire el código

int i = 10;                                     //line 1 
int *p = &i;                                    //line 2  
delete p;                                       //line 3 
cout << "*p = " << *p << ", i = " << i << endl; //line 4  
i = 20;                                         //line 5  
cout << "*p = " << *p << ", i = " << i << endl; //line 6  
*p = 30;                                        //line 7
cout << "*p = " << *p << ", i = " << i << endl; //line 8  

¿Cuál es el resultado de este código? Especialmente de la línea 3, 5 y 7? ¿Es que invocan un comportamiento indefinido? ¿Cuál sería el resultado?

EDIT: He intentado ejecutarlo usando g ++, y de compilar y ejecutar bien! Estoy usando MinGW en Windows 7.

¿Qué dice estándar en este contexto?

¿Fue útil?

Solución

Puede eliminar sólo un puntero si alguna vez ha asignado dinámicamente usando nueva. En este caso no se ha asignado el puntero utilizando las nuevas sino simplemente definido e inicializado para que apunte a una variable local de tipo int.

Invocación de eliminación en un puntero no asigna dinámicamente utilizando nueva es algo que se llama comportamiento indefinido . En pocas palabras, esto significa que nada en la tierra puede ocurrir cuando se ejecuta un código de este tipo y no se puede queja un poco para cualquier persona en este planeta.

Otros consejos

delete p; es UB y por lo que cualquier comportamiento más no se puede predecir o depender de ella. Usted programa puede bloquearse inmediatamente o pasar todo su dinero o salir sólo de main() y nada de simulación sucedieron.

La línea 3 es sin duda un comportamiento indefinido, ya que usted está tratando de borrar la memoria en una dirección que no está en el montón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top