2

我正在使用 Qt Creator 开发应用程序。

我不是一个好的 C++ 程序员,所以可能存在概念错误等。

我在复制结构数组并返回结构时遇到问题。

有很多与类似标题相关的解决方案,但无法解决我的问题。

这是我的代码:

ABC.h

typedef struct command_packet_struct
{
    QString ItemDataName;
    DATA_TYPE ItemDataType;
    int ItemDataLength;
} COMMAND_PACKET_STRUCT;

class ABC 
{
private:

    COMMAND_PACKET_STRUCT* getHeaderTitle(int index);
    COMMAND_PACKET_STRUCT *_packetStruct ;
};

ABC.cpp

COMMAND_PACKET_STRUCT _OA_Packet [] = {
    {"ERROR\nMAIN CODE" ,       DATA_TYPE_NUM,          5 },
    {"ERROR\nSUB CODE"  ,       DATA_TYPE_NUM,          4 },
    {"SCALE VERSION"    ,       DATA_TYPE_ASCII,        8 },
    {"E-PRE VERSION"    ,       DATA_TYPE_ASCII,        8 }
};

COMMAND_PACKET_STRUCT* PCU_SIM_ORDER_TASK::getHeaderTitle(int index)
{
    int maxSize;

    if (_packetStruct != NULL)
    {
        _packetStruct = 0;
    }

    _packetStruct = new COMMAND_PACKET_STRUCT(*_OA_Packet);
    maxSize = ((sizeof(_OA_Packet)/sizeof(COMMAND_PACKET_STRUCT)) - 1);
    memcpy(_packetStruct, _OA_Packet, maxSize) ;

    qDebug() << sizeof(COMMAND_PACKET_STRUCT);       // return 12
    qDebug() << sizeof(_packetStruct);               // return 4
    qDebug() << sizeof(_OA_Packet);                  // return 48

    return _packetStruct;
}

上面的代码显示了我为结构数组所做的实现。

我需要复制结构数组

           _OA_Packet

           _packetStruct

但是当我尝试获取_packetStruct的大小时,它给出了4_OA_Packet的大小给出了48

因此,当尝试显示结构的内容时,它会返回“segmentation fault error”

任何想法,建议?

4

1 回答 1

1
  1. 您的 struct COMMAND_PACKET_STRUCT 应该在 C++ 中这样定义

    struct COMMAND_PACKET_STRUCT 
    {
     QString ItemDataName;
     DATA_TYPE ItemDataType;
     int ItemDataLength;
    };
    
  2. 使用您的默认构造函数来分配空间。

    maxSize = ((sizeof(_OA_Packet)/sizeof(COMMAND_PACKET_STRUCT)));   
    _packetStruct = new COMMAND_PACKET_STRUCT[maxSize];
    
  3. 复制内容。

    std::copy(_OA_Packet,_OA_Packet+maxSize,_packetStruct);
    
  4. _packetStruct 是指针,您可能想检查它指向的数据大小。

    qDebug() << sizeof(*_packetStruct);               // return 4 -->will be 12
    
于 2013-03-22T09:09:07.223 回答