Acerca del puntero no inicializado y el puntero nulo en lenguaje C

El puntero p se define e inicializa al mismo tiempo, para que pueda ejecutarse normalmente, el código es el siguiente:

#include <stdio.h>
int main()
{
    
    
    int a;
    int *p=&a;
    scanf("%d",p);
    printf("%d",*p);
    return 0;
}

El puntero se inicializa a nulo y no puede ejecutarse normalmente en este momento. El código es el siguiente:

#include <stdio.h>
int main()
{
    
    
    int *p=NULL;
    scanf("%d",p);
    printf("%d",*p);
    return 0;
}

Parece que tampoco se pueden usar punteros nulos.

Nuevo en 20200505
Algunas ideas sobre punteros y asignación de memoria dinámica
1. La primera dirección del espacio de almacenamiento ocupado por la variable en la memoria se llama dirección de la variable, y los datos almacenados en el espacio de almacenamiento de la variable se convierten en el valor de La variable. (Antes no leía esta oración con atención. Las direcciones almacenadas en la variable de puntero p están todas vacías, ¿cómo puedo asignar un valor a * p? La piel no tiene la sensación de apego)
2. La función malloc () : Se utiliza para asignar varios bytes de espacio de memoria y devolver un puntero a la primera dirección de la memoria. Si el sistema no puede proporcionar suficiente espacio de memoria, la función devolverá un puntero nulo NULL
3. Continúe usando la memoria después de liberar la memoria.Si la memoria
se libera pero aún continúa usándola, resultará en un puntero salvaje.
Cuando se libera el espacio de memoria de la pila al que apunta el puntero, el puntero que apunta a él no muere. Después de que se libera la memoria, el valor del puntero no cambia realmente. Todavía apunta a esta memoria, pero los datos almacenados en la memoria se convierte en Valor aleatorio (distorsionado) solamente. El resultado de liberar la memoria solo cambia los datos almacenados en la memoria, haciendo que el contenido almacenado en la memoria sea un pollo caliente, y el puntero a la memoria de basura se llama puntero salvaje.
Una vez que se libera la memoria, el puntero no se convertirá automáticamente en un puntero nulo y el puntero salvaje no es un puntero nulo

Supongo que te gusta

Origin blog.csdn.net/weixin_43919570/article/details/105555298
Recomendado
Clasificación