尝试访问复杂结构时出现分段错误

时间:2018-12-05 04:17:57

标签: c segmentation-fault

尝试从结构内部打印字符串值时遇到分段错误。 我正在尝试访问cdata参数。

我在指定的行出现了分段错误。

struct node_id{
    union {
         uint32_t numeric;
         struct my_string *string;
         struct my_bytestring *opaque;
    } identifier;
    enum my_identifiertype type;
    uint16_t index;
};

struct my_string{
    uint32_t len : 31;
    uint32_t free: 1;
    union {
      const char *cdata;
      char *data;
    } d;
};

get_nodeid(node_t node, struct nodeid *id){
   //some code
}

struct nodeid *id;
get_nodeid(node,id);
printf("%s", id->identifier.string->d.cdata );   // ------- Seg Fault comes here
nodeid_clear(&id);

如果我仅使用格式说明符%o(object)打印id,它不会产生段错误,并且在调试时显示无法访问cdata的内存位置。

如果在代码的其他部分也以相同的方式使用了分段错误,为什么有人可以访问它时为什么会出现分段错误呢?

0 个答案:

没有答案