gpt4 book ai didi

c - 在结构内部使用 C 结构会导致段错误

转载 作者:行者123 更新时间:2023-11-30 17:53:48 25 4
gpt4 key购买 nike

这是数据的结构:

    struct variabile {
char* nome;
char* contenuto;
struct variabile* next;
int tipo;
};

这是代码:

    struct variabile* pt = malloc (sizeof (struct variabile));
pt->nome = $1;
pt->tipo = type;
pt->contenuto = $2;
pt->next=NULL;


if (testaVariabile == NULL)
testaVariabile=pt;
else {
struct variabile* current = testaVariabile;


while ((current->next)!=NULL){

if(strcmp(current->nome, pt->nome)==0)
fprintf (stderr, "warning: clash di nome di variabili %s \n", current->nome);
current=(current->next);
}
(current->next)=pt;

if(strcmp(current->nome, pt->nome)==0)
fprintf (stderr, "warning: clash di nome di variabili %s \n", current->nome);
}

这是变量 testaVariabile 的初始声明。

       struct variabile* testaVariabile = NULL;

当我尝试更新最后一行代码中的 currentnext 值时,出现段错误错误。我还验证了代码没有进入 while 循环。

我对 C 还很陌生,所以请解释一下答案。

谢谢

编辑

其余代码是 Flex 解析器。

编辑

我的一个 friend 告诉我使用 gdb 进行调试。结果发现错误来自

       strcmp(current->nome, pt->nome)

我真的很抱歉在错误的地方浪费了时间寻找问题,但这是我第一次认真使用 C 和 Flex。

有人知道如何解决这个问题吗?

好的,最后一次更新。

检查后的答案解决了问题。但在本例中,词法分析器从文件中读取值的方式也存在错误,因此这是一个由两部分组成的问题。

最佳答案

试试这个:

struct variabile* pt = malloc (sizeof (struct variabile));
pt->nome = malloc(strlen($1) + 1);
strcpy(pt->nome, $1);
pt->tipo = type;
pt->contenuto = $2; // maybe the same for this too?
pt->next=NULL;

/* rest of your code ... */

只是一个疯狂的猜测

关于c - 在结构内部使用 C 结构会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com