Si tratta di un esempio valido di puntatore pendente?

7

Il libro "Data Structures in C" (Horowitz e Sahni) suggerisce che nel seguente codice il puntatore pf si comporti come un riferimento ciondolante:

float f,*pf;
pf=(float*) malloc(sizeof(float));
*pf=2.6;
pf=(float*) malloc(sizeof(float));

Il ragionamento che danno è che dopo l'ultima riga non c'è modo per recuperare la memoria in cui è stato memorizzato 2.6.

Tuttavia, wikipedia definisce un puntatore pendente come

Dangling pointers and wild pointers in computer programming are pointers that do not point to a valid object of the appropriate type

Nel codice sopra pf non soddisfa questa definizione - punta a un oggetto valido di tipo appropriato.

È pf un puntatore pendente, o qualcos'altro?

    
posta user1369975 23.05.2013 - 13:38
fonte

1 risposta

21

No, non lo descriverei come un puntatore pendente, ma è una perdita di memoria perché non si libera il primo malloc prima del secondo malloc. Un puntatore pendente tipicamente sarebbe un puntatore che punta a qualcosa che ad es. è già stato liberato

float f,*pf;
pf = malloc(sizeof(float));
*pf = 2.6;
free(pf);
f = *pf; /*uhoh pf no longer points to valid memory */

Guardando il resto del codice di esempio, f non sembra essere usato, il che è strano, e il cast to (float *) non è necessario a meno che non sia necessario compilare il codice anche come C ++ (qualcosa che era comune quando Il C ++ era un linguaggio nuovo, ma non più, sospetto che questo possa uscire con il tuo libro?). Anche se non riesco a trovare il libro esatto di riferimento, i libri C e C ++ simili degli autori sembrano avere recensioni abbastanza scarse, potresti prendere in considerazione un libro di testo diverso!

    
risposta data 23.05.2013 - 13:44
fonte

Leggi altre domande sui tag