【问题标题】:Array of structures within a structure? [closed]结构中的结构数组? [关闭]
【发布时间】:2016-08-18 10:30:47
【问题描述】:

我有一个结构 Register 和一个结构 ModbusReadStructRegister 声明如下:

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;

但是,这种精确的实现会导致错误(Segmentation Fault)。实现类似于我上面想法的功能的最佳方法是什么?

【问题讨论】:

  • 分段错误可能在使用它的代码中。我认为您创建的结构没有任何问题。
  • 在结构中包含结构(或结构数组)没有问题。错误在其他地方。
  • 结构看起来不错,崩溃可能是因为其他原因。请使用调试器来捕捉正在运行的崩溃,以便您可以在代码中找到它发生的位置。
  • 请注意ModbusReadSruct 的大小为~15kB,它可能太大而无法在堆栈上分配。
  • @Mst137:贴出显示问题的代码

标签: c struct structure


【解决方案1】:

您发布的结构声明完全正确,除了您对类型和ModbusReadStruct 的结构成员的名称使用相同的标识符Register

分段错误表明您的代码存在问题,而不是结构声明本身。

正如 EOF 所评论的,正如声明的那样,ModbusReadStruct 结构的大小约为 17KB。虽然在现代 PC 上可以使用自动存储(又名 在堆栈上)分配此类对象,但在嵌入式系统上堆栈空间可能会大大减少。分配足够大的ModbusReadStruct 的本地数组也将是一个问题。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @Jeeter:我不同意:这个答案确实解决了这个问题,Mst137 从未提供过有问题的代码,但问题似乎与结构大小有关,因为他能够调试他的通过减小数组大小来解决问题。我同意该问题的文档记录不充分,但建议我们保留答案或删除该问题。
猜你喜欢
  • 2015-01-05
  • 2018-04-15
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
相关资源
最近更新 更多