【发布时间】:2021-12-31 22:20:12
【问题描述】:
我正在尝试为 mini 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);
【问题讨论】:
-
奇怪的是,你使用
U_Lexicale作为结构名称,使用ElementUL作为类型定义。在两个地方使用相同的名称以避免混淆。 -
样式说明:你不需要第二个
if。如果liste是NULL,程序将退出,因此将无法执行其余的功能。如果这没有发生,那么我们已经知道liste不是NULL。 -
如果你不退出,
else会更有意义。
标签: c function pointers linked-list codeblocks