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になります。

したがって、構造体の内容を表示しようとすると、「セグメンテーション違反エラー」が返されます。

任意のアイデア、提案??

4

1 に答える 1

1
  1. 構造体 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 に答える