我正试图为迷你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);
您修改了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);