我正在嘗試為迷你 SQL 語言創建一種簡單的編譯器,當我執行演算法時,有一個步驟是我需要呼叫一個函式來洗掉鏈表的頭節點(包含語言)并將頭部分配給第二個節點。在函式內部,代碼似乎作業得很好(當我列印串列時,頭部現在是第二個節點)。但是原始串列的變化影響很奇怪,因為第一個頭仍然存在,但具有不同的值,如 12321104(=p)。所以問題出在哪里,這是我的鏈表的結構:
typedef struct U_Lexicale {
char* Nom_UL;
int Type_UL;
int Ligne_UL;
struct U_Lexicale* suivant;
} ElementUL;
void suppression(ElementUL* liste) {
if (liste == NULL) {
exit(EXIT_FAILURE);
}
if (liste != NULL) {
ElementUL* tmp = liste;
liste = liste->suivant;
free(tmp);
afficherListeUL(liste);
}
}
suppression(copieAnalyseLex);
uj5u.com熱心網友回復:
您修改liste,但您不會修改copieAnalyseLex以反映該更改。
#include <assert.h>
void suppression(ElementUL** liste_p)
{
assert( *liste_p != NULL );
ElementUL* tmp = *liste_p;
*liste_p = (*liste_p)->suivant;
free(tmp);
}
suppression(&copieAnalyseLex);
afficherListeUL(copieAnalyseLex);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400289.html
上一篇:輸出不是我從代碼中所期望的
下一篇:嘗試使用strtok時記憶體損壞
