使用以下結構:
typedef struct lista {
int num;
struct lista * sig;
} nodo;
然后我們有以下函式來擦除由先前結構節點形成的鏈表:
void eliminarListaEntera(nodo * registro) {
nodo * aux = NULL;
while(registro->sig != NULL){
aux=registro->sig;
printf("Borrando nodo de la lista\n");
free(registro);
registro=aux;
}
free(registro);
registro = NULL;
}
我看到的問題:如果我在呼叫 eliminarListaEntera 之前和之后在 main() 中運行以下內容:
printf("POINTER %p\n", (void *) primerNodo);
我得到相同的值。呼叫delete函式后不應該是0(NULL)嗎?
如果我再次嘗試遍歷它,我只會得到一個像 -159426562 這樣的隨機值,我猜這是因為它正在從記憶體中檢索一個垃圾值。
uj5u.com熱心網友回復:
當main呼叫eliminarListaEntera(primerNodo),它傳遞的價值primerNodo。在里面eliminarListaEntera,引數registro是一個單獨的物件,不以任何方式參考primerNodoin main。
該陳述句registro = NULL;設定registro為NULL并且對primerNodoin沒有影響main。
如果你想讓一個被呼叫的函式影響呼叫者中的一個物件,你可以傳遞一個指向該物件的指標:
void eliminarListaEntera(nodo **p) {
nodo *registro = *p; // Copy the original pointer for ease of use.
nodo * aux = NULL;
while(registro->sig != NULL){
aux=registro->sig;
printf("Borrando nodo de la lista\n");
free(registro);
registro=aux;
}
free(registro);
*p = NULL; // Set the original pointer to NULL.
}
然后main可以用 呼叫這個例程eliminarListaEntera(&primerNodo);。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314971.html
