声明结构内部变量后的分段错误

时间:2010-09-25 17:01:53

标签: struct floating-point segmentation-fault

我目前正在使用网络模拟器2进行项目。当我在结构re_block中添加变量时,程序会编译但在运行时会给我分段错误。当我将变量声明为静态时,没有运行时错误。有人请解释一下。

struct re_block {
# if __BYTE_ORDER == __BIG_ENDIAN
 u_int16_t g : 1;
 u_int16_t prefix : 7;
 u_int16_t res : 2;
 u_int16_t re_hopcnt : 6;
# elif __BYTE_ORDER == __LITTLE_ENDIAN
 u_int16_t res : 2;
 u_int16_t re_hopcnt : 6;
 u_int16_t g : 1;
 u_int16_t prefix : 7;
# else
#   error "Adjust your <bits/endian.h> defines"
# endif
 u_int32_t re_node_addr;
 u_int32_t re_node_seqnum;
};
#define MAX_RE_BLOCKS 

typedef struct { 
 u_int32_t m : 1;
 u_int32_t h : 2;
 u_int32_t type : 5;
 u_int32_t len : 12;
 u_int32_t ttl : 6;
 u_int32_t i : 1;
 u_int32_t a : 1;
 u_int32_t s : 1;
 u_int32_t res1 : 3;

 u_int32_t target_addr;
 u_int32_t target_seqnum;

 u_int8_t thopcnt : 6;
 u_int8_t res2 : 2;

 struct re_block re_blocks[MAX_RE_BLOCKS];
} RE;

我想在struct re_block中添加两个float变量。请帮忙

1 个答案:

答案 0 :(得分:0)

使用valgrind之类的内存调试工具,您是否可以在代码中找到发生段错误的位置?我的猜测是有一些运行时代码利用re_block结构的数据布局,例如通过将指针转换为re_block实例来键入(u_int16_t *)并取消引用为获取第一个成员的方法,而不是使用运算符->。向结构中添加成员可以更改数据的布局,因此使用此类技巧的代码可能会中断。