Struct 在结构内部声明变量后出现分段错误

Struct 在结构内部声明变量后出现分段错误,struct,floating-point,segmentation-fault,Struct,Floating Point,Segmentation Fault,我目前正在使用网络模拟器2进行一个项目。当我在structure re_块中添加变量时,程序会编译,但在运行时会给我分段错误。当我将变量声明为静态时,没有运行时错误。请有人解释一下 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

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

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_块中添加两个浮点变量。请使用valgrind之类的内存调试工具帮助

,您能在代码中找到SEGFULT发生的位置吗?我的猜测是,有一些运行时代码利用了re_块结构的数据布局,例如,通过将指向re_块实例的指针强制转换为键入u_int16_t*并取消引用作为获取第一个成员的方法,而不是使用操作符->。向结构中添加成员可能会更改数据的布局,因此使用这些技巧的代码可能会中断。

我们需要查看将这些变量放置在struct re_块(分配re_块和/或re对象的代码)中的什么位置,以及崩溃的代码,即当segfault发生时调试器说程序在其中的函数。define MAX_RE_BLOCKS-它在代码中真的是空的吗?如果是这样,struct RE将根本没有为RE_块分配的内存,因为它会变成一个无大小的数组。这看起来不像预期的用途…define MAX_RE_BLOCKS 50是我的实际代码。我想是复印时出错了。字节排序是否有助于修复此分段错误?上面的代码用于头文件,使用此头文件的c代码访问struct的变量作为re->re_块[0]。g=g;re->re_块[0]。前缀=前缀;re->re_块[0]。res=0;re->re_块[0]。re_hopcnt=0;re->re\u块[0]。re\u节点\u地址=u\u int32\u树\u节点\u地址.s\u地址;re->re_块[0]。re_节点_seqnum=htonlre_节点_seqnum;