2016-08-18 3 views
0

У меня есть структура Register и структура ModbusReadStruct. Register объявляется, как показано ниже:Массив структур внутри структуры?

typedef struct { 
    int TypeID; 
    char InstrumentType[32]; 
    char RegTag[32]; 
    char Protocol[32]; 
    int RegNum; 
    char RW[32]; 
    char RegisterType[32]; 
    char Signed[32]; 
    char Inverted[32]; 
    char DataType[32]; 
    int Counts; 
} Register; 

Я хотел бы объявить структуру ModbusReadStruct, как показано ниже:

typedef struct { 
    int Address; 
    int Port; 
    int BaudRate; 
    int DataBits; 
    int StopBits; 
    int RegID; 
    int Sampling; 
    char InstanceName[32]; 
    int InstNum; 
    int MBNum; 
    int PortNum; 
    int RegNum; 
    Register Register[64]; 
} ModbusReadStruct; 

Однако это Конкретная реализация приводит к ошибкам (Сегментация ошибка). Какой был бы лучший способ достичь функциональности, аналогичной моей идее выше?

+2

Возможно, что ошибка сегментации находится в коде, который его использует. Я не думаю, что есть какие-либо проблемы с созданными вами структурами. – byxor

+1

Нет проблем с наличием структур (или массивов структур) внутри структур. Ошибка в другом месте. – Nelfeal

+1

Структуры выглядят прекрасно, авария, вероятно, из-за чего-то еще. Пожалуйста, используйте отладчик, чтобы поймать крах в действии, чтобы вы могли найти, где это происходит в вашем коде. –

ответ

1

Вы объявили объявления о структуре, за исключением того, что вы использовали один и тот же идентификатор Register для типа и имени члена структуры ModbusReadStruct.

Ошибка сегментации указывает на проблему с вашим кодом, а не с самими декларациями структуры.

Как EOF прокомментировал, как заявлено, структура ModbusReadStruct имеет размер приблизительно 17 КБ. При размещении таких объектов с автоматическим хранением (aka в стеке) возможно на современных ПК, пространство стека может быть существенно меньше на встроенных системах. Проблема будет также связана с локальным массивом ModbusReadStruct достаточного размера.

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/13379159) – Jeeter

+0

@Jeeter: Я прошу не согласиться: этот ответ решает вопрос, Mst137 никогда не предоставлял нарушающий код, но проблема, похоже, связана с размер структуры, поскольку он смог отладить свою проблему, уменьшив размеры массива. Я согласен, что этот вопрос плохо документирован, но мы предлагаем сохранить ответ или удалить вопрос. – chqrlie

Смежные вопросы