Ошибка сегментации после объявления переменной внутри структуры - PullRequest
0 голосов
/ 25 сентября 2010

В настоящее время я работаю над проектом с использованием сетевого симулятора 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;

Я хочу добавить две переменные типа float в struct re_block.Пожалуйста, помогите

1 Ответ

0 голосов
/ 25 сентября 2010

Используя инструмент отладки памяти, такой как valgrind, можете ли вы найти место в коде, где происходит ошибка?Я предполагаю, что есть некоторый код времени выполнения, который использует преимущества структуры данных re_block, например, путем приведения указателя к экземпляру re_block для ввода (u_int16_t *) и разыменования как средства получения первогочлен, а не с помощью оператора ->.Добавление членов в структуру может изменить расположение данных, поэтому код, использующий такие приемы, может сломаться.

...