C - 结构传递值 - 分段错误

时间:2014-05-04 12:18:21

标签: c struct

在尝试将值放入标签时 list-> qtag-> label = x; 中的错误在哪里?

struct quad{

        int label;
        char op[30];
        char x[30];
        char y[30];
        char z[30];
        struct quad *next;
};

struct tag{

        struct quad *qtag;
        struct tag *next2;
};

struct tag *makelist(int x){

        struct tag *list;
        list=(struct tag*)malloc(sizeof(struct tag));
        list->qtag->label=x;
        printf("!\n");
        return list;
};

2 个答案:

答案 0 :(得分:0)

您未在qtag中初始化list。可以像这样修复:

list=(struct tag*)malloc(sizeof(struct tag));
list->qtag = (struct quad*)malloc(sizeof(struct quad));
list->qtag->label = x;

不要忘记检查malloc()的返回值是否存在错误。

答案 1 :(得分:0)

您为初始标记条目分配了内存 - 但您尚未将该数据初始化为任何内容。使用malloc,数据内容很可能是随机的。具体列表 - > qtag并没有指向任何东西,因为你没有把它指向任何东西。

您需要初始化列表 - > qtag指向一个现有的四元结构,或malloc另一块内存 - 和点列表 - > qtag它 - 例如:

struct tag *makelist(int x){

    struct tag *list;
    list=(struct tag*)malloc(sizeof(struct tag));
    q = (struct quad*)malloc(sizeof(struct quad));
    list->qtag = q;
    list->qtag->label=x;
    printf("!\n");
    return list;

};