2014-05-04 75 views
0

错误在哪里list-> qtag-> label = x;虽然试图把价值标签?C - 结构通过值 - 分段错误

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; 
}; 
+6

你在哪里为'*(list-> qtag)'分配内存? –

+0

非常感谢!完全忘了! :D – user3601268

+0

..如果你不想使用调试器,你很快就会发现它。 –

回答

0

你没有在你的list初始化qtag。可定是这样的:

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

不要忘记检查的malloc()的返回值可能出现的错误。

0

您已经为您的inital tag条目分配了内存 - 但您尚未将该数据初始化为任何内容。使用malloc数据内容可能是随机的。特别是list - > 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; 

};