Estoy revisando los conceptos básicos de C ++ y tengo algunos problemas para comprender por qué mi código está activando una afirmación fallida.
void fonctionPointeur(int a)
{
int* p = new int;
p = &a;
std::cout << p << "----" << *p << std::endl;
delete p;
}
int main()
{
std::cout << "Hello World!" << std::endl;
int a = 6;
fonctionPointeur(a);
}
La afirmación fallida de que estoy activando es siempre diferente, lo que me lleva a pensar que la eliminación de p está accediendo a una ranura de memoria desconocida. Cuando estoy eliminando la eliminación p; o el p = & a; entonces todo funcionará bien. Me parece que se supone que no debo eliminar py que se eliminará al final del alcance, pero no se supone que sea una asignación dinámica ...
Que me estoy perdiendo aqui ?
En esta expresión
int* p = new int;
está asignando a p
un bloque de memoria asignado por new
.
En esta expresión
p = &a;
estás asignando a p
la dirección de mero temporal, una copia de la variable original a
(a medida que la pasas por copia fonctionPointeur
), que temporal no puede ser delete
d.
Esto es para ser específico, incluso lo pasó por referencia ( void fonctionPointeur(int &a)
) el problema permanece, tampoco puede liberarlo ya que no se asignó dinámicamente.
Además, perdió el acceso a la memoria previamente asignada, ya no puede delete
hacerlo, esto es una pérdida de memoria.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras