以下是数据的结构:
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;
当我尝试更新最后一行代码中 current 的 next 值时,出现了分段错误错误。 我还验证了代码在循环时没有进入。
我对C很新,所以请解释一下答案。
谢谢
修改
其余代码是Flex解析器。
修改
我的一个朋友告诉我使用gdb进行调试。结果是错误来自
strcmp(current->nome, pt->nome)
我真的很抱歉在错误的地方找不到问题的时间,但这是我第一次使用C和Flex的重要时刻。
有人知道如何摆脱这个问题吗?
好的,上次更新。
选中的答案解决了问题。 但在这种情况下,词法分析器从文件中读取值的方式也存在错误,因此这是一个由两部分组成的问题。
答案 0 :(得分:0)
试试这个:
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 ... */
只是一个疯狂的猜测