La asignación dinámica básica y la eliminación desencadenan una afirmación fallida

tony497:

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 ?

anastaciiu:

En esta expresión

int* p = new int;

está asignando a pun bloque de memoria asignado por new.

En esta expresión

p = &a; 

estás asignando a pla 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 deleted.

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 deletehacerlo, 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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

La asignación y eliminación de memoria dinámica básica desencadena una afirmación fallida

La asignación y eliminación de memoria dinámica básica desencadena una afirmación fallida

Ascua pertenece a la afirmación fallida

Afirmación fallida: la expresión booleana no debe ser nula

Sobrescriba la funcionalidad básica de la asignación de acciones y los parámetros en una API web .net

¿Falla la asignación dinámica? c ++

Asignación y eliminación dinámica de memoria

¿Cómo doy una clave dinámica para la afirmación del esquema en Karate DSL?

eventualmente no intenta la segunda afirmación en la primera afirmación fallida

¿Puede tener una matriz dinámica dentro de la lista vinculada y su asignación de memoria?

regla como si y eliminación de la asignación

Complejidad de tiempo de la asignación de memoria para una matriz (no dinámica)

Cree una matriz 2d de cadenas utilizando la asignación dinámica en c

¿Podemos usar la asignación dinámica para una matriz de matrices en Cuda C++?

asignación dinámica y valor del miembro de la clase

Duda de conceptos relacionados con la asignación de memoria dinámica y punteros

Problemas con las estructuras anidadas y la asignación de memoria dinámica

Svelte: la mutación de matriz y la reasignación no desencadenan la re-renderización en #each block

¿Cómo funciona la asignación de memoria dinámica?

Asignación no válida en la matriz dinámica C

Errores en la visualización y transmisión de una estructura básica.

entrada parametrizar Junit y la afirmación

¿Cuál es la diferencia entre la matriz de longitud variable y la asignación de memoria dinámica?

¿Cuál es la diferencia entre la matriz de longitud variable y la asignación de memoria dinámica?

Arrays y asignación dinámica

C puntero y asignación dinámica

¿Cómo persistir la acción fallida en la eliminación de la aplicación y enviarla al reabrir la aplicación?

La afirmación no funciona

Deshabilite la autenticación básica (Spring Security) para una solicitud y deje para todos

TOP Lista

CalienteEtiquetas

Archivo