无法删除我的链表的头节点
can't delete the head node of my linked list
我正在尝试为迷你 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);
我正在尝试为迷你 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);