Cosa sono i puntatori jolly in C e come possiamo evitarli?

Cosa sono i puntatori jolly in C e come possiamo evitarli?

Cosa sono i puntatori jolly in C?

I puntatori non inizializzati sono noti come puntatori jolly. Il comportamento dei puntatori non inizializzati non è definito perché puntano a una posizione di memoria arbitraria. I puntatori jolly possono causare un arresto anomalo del programma o un comportamento scorretto.

Nota: In genere, i compilatori avvertono del puntatore jolly.

int *ptr; //ptr is wild pointer

Vediamo un programma per capire il puntatore jolly.

#include<stdio.h>

int main()
{
    //ptr pointing some unknown memory location
    int *ptr; /* wild pointer */

    //Assigning value
    *ptr = 12;

    printf("%d\n",*ptr);

    return 0;
}

Risultato:

Comportamento indefinito.

Spiegazione: Nel programma citato ptr non è inizializzato da memoria valida. Quindi potrebbe puntare a una posizione sconosciuta quando accederai alla posizione sconosciuta il comportamento del programma sarà indefinito.

Come possiamo evitare i puntatori jolly?

Possiamo facilmente evitare la creazione del puntatore jolly nel nostro programma. Dobbiamo inizializzare il puntatore con una memoria valida al momento della dichiarazione del puntatore. Vediamo un esempio di programma C,

#include<stdio.h>

int main()
{
    int data = 27;

    //Now pointer pointing valid memory
    int *ptr = &data; /* no more wild pointer */

    //Assigning value
    *ptr = 12;

    printf("%d\n",*ptr);

    return 0;
}

Risultato:

12

Spiegazione: ptr punta ai dati, quindi ora ptr non è un puntatore jolly.

Se non si dispone di una variabile, è possibile utilizzare le funzioni di gestione della memoria (malloc, calloc, ecc.) per assegnare una memoria valida. Vediamo un esempio,

#include<stdio.h>
#include<stdlib.h>

int main()
{
    //Now pointer pointing valid memory
    int *ptr = malloc(sizeof(int)); /* no more wild pointer */

    if(ptr == NULL)
    {
        return -1;
    }
    //Assigning value
    *ptr = 12;

    printf("%d\n",*ptr);

    free(ptr); //free allocated memory

    return 0;
}

Risultato;

12

infine, se non si vuole assegnare memoria al puntatore al momento della dichiarazione. È necessario inizializzare il puntatore con NULL (puntatore null). Il comportamento del puntatore nullo è definito dallo standard C ed è necessario convalidare il puntatore prima del suo utilizzo.

#include<stdio.h>
#include<stdlib.h>

int main()
{

    int *ptr = NULL; /* no more wild pointer */

    if(ptr == NULL)
    {
        ptr = malloc(sizeof(int));
        if(ptr == NULL)
        {
            return -1;
        }
        //Assigning value
        *ptr = 26;

        printf("%d\n",*ptr);

        free(ptr); //free allocated memory
    }

    return 0;
}

Risultato;

26

Articoli consigliati per te:

  • Puntatori penzolanti, vuoti, nulli e selvaggi
  • Domande sull'intervista del puntatore in C/C++.
  • Puntatore funzione in c, una guida dettagliata
  • Come creare un array dinamico in C?
  • 15 Errori comuni nell'allocazione della memoria.
  • Come accedere all'array 2d in C?
  • Una breve descrizione del puntatore in C.
  • Come utilizzare la struttura del puntatore a funzione in linguaggio c?
  • Domande del colloquio di 100 C, potrebbe chiederti il ​​tuo intervistatore.
  • Layout di memoria in C.
  • Domande per l'intervista Python con risposta.
  • Gestione dei file in C.
  • Puntatore funzione nella struttura.
  • puntatore vuoto in C, Una discussione dettagliata.
  • Gestione dei file in C.
  • Specificatori di formato C.