在结构内部使用C Struct会导致分段错误

时间:2013-03-14 02:02:56

标签: c struct segmentation-fault

以下是数据的结构:

    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的重要时刻。

有人知道如何摆脱这个问题吗?

好的,上次更新。

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

1 个答案:

答案 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 ... */

只是一个疯狂的猜测