簡體   English   中英

C ++:復制結構數組並返回結構數組

[英]C++ : Copy Array of Structure and return the array of structure

我正在使用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

因此,當嘗試顯示結構的內容時,它會返回“分段錯誤”

任何想法,建議?

  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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM