Domanda

Sto lavorando su un progetto e io continuo a in questo errore che non mi permetterà di completare il progetto. Quando ho inizializzo uno dei miei puntatori per puntare a un oggetto che verrà effettuato durante l'esecuzione del programma e ho inizializzarlo a NULL. Poi quando controllo per vedere che cosa è impostato ad esso restituisce un valore di nil. Come è una cosa possibile? Non credevo che i puntatori nulli esistevano in C. C'è un modo per aggirare questo?

struct order_line *front = NULL;
...
printf("Head: %p\n", front);  // prints -> Head: (nil)
È stato utile?

Soluzione

%p in printf formatta un tipo di puntatore. Questo sta per distinguere un null-pointer e stampare (nil) perché è un valore speciale nel contesto di un puntatore. Se si vuole l'uscita 0 per un puntatore nullo, il cast del puntatore ad un %d intero e l'uso invece:

printf("Head: %d\n", (int) front);

Risposta originale in quanto può essere ancora utile:

NULL è una macro definita come 0 o ((void *) 0), quindi se si imposta un puntatore ad NULL è esattamente la stessa di impostandolo a 0. Questo funziona per il proposto di dichiarare puntatori nulli perché la memoria all'indirizzo 0 non sarà mai assegnato al vostro programma.

Altri suggerimenti

Quando si stampa un puntatore usando printf("%p", somePtr), è stampato in un implementazione definita modo , come da questa citazione dal POSIX printf specifica (simile formulazione esiste nella specifica C99 anche).

L'argomento deve essere un puntatore a vuoto. Il valore del puntatore viene convertito in una sequenza di caratteri stampabili, in modo dipendente dall'implementazione.

Credo che questo mezzo, se il puntatore è NULL, può stamparlo come vuole, tra cui la stampa come nil o 0x00000000 o 0.

utilizzo

printf("Head: %s, %d, %p\n", front, front, front);

per stampare Head: (null), 0, (nil)

Grazie Packia

Sto assumendo che nulla è ciò che il vostro debugger ti sta dicendo. Nella maggior parte dei compilatori nulla è solo ed #define a 0 in ogni caso in modo che il nome non è così importante.

Come altri hanno detto, non esiste una cosa come puntatore nullo in C.

Può essere la vostra allocazione di memoria non riesce, causando 0 da assegnare al puntatore.

Se la domanda riguarda confrontando il valore del puntatore a NULL allora il valore stampato da printf () non dovrebbe importare. Si può ancora fare se (PTR == null) per questo.

    ptr = (zero) e NULL = (zero) => ptr = NULL:)

L'errore che si stanno ottenendo must a causa di qualche altra ragione.

Dopo la fusione il puntatore struttura a int, fornisce la condizione previsto con if ..

printf("The address of the variable is---ps->p---After Deletion-- %p \n",ps->p);
printf("The address of the variable is---ps->p---After Deletion--  %d \n",(int)ps->p);
if((int)ps->p){
printf("Again in Free\n");
doFree((void **)&ps->p);
}

USCITA: -

L'indirizzo della variabile è --- PS-> p --- Dopo Deletion-- nil L'indirizzo della variabile è --- PS-> p --- Dopo Deletion-- 0

lo farà restituisce false per se la condizione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top