我正在使用Qt Creator開發應用程序。C++:複製結構數組並返回結構數組
我不是一個很好的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的大小,它給而大小_OA_Packet給出
因此,當嘗試顯示結構的內容,其與「分段錯誤」
任何意見,建議返回??
'_packetStruct'是一個指針。 'sizeof'給你的指針大小不是指針指向的內存大小。指針指向一個足夠大的內存位置,通過使用'new'分配給它。另外,你不應該爲類使用'memcpy'。相反,您應該爲該類重載複製賦值運算符'='。 – 2013-03-22 08:21:18
@Alok,謝謝你的回覆。 最初我嘗試使用賦值運算符,但錯誤是一樣的。所以我轉向了這個概念。你能提供一些提示/例子嗎?我可能在我的情況下做錯了什麼? – skg 2013-03-22 08:30:35
需要考慮的幾點(儘管與您的問題沒有直接關係):1)所有大寫字母名稱通常用於宏,因此您可能不想將其用於類型(可能會讓其他人閱讀代碼時感到困惑)。 2)'typedef struct ...'在C中很有用,但在C++中是不必要的。 'struct COMMAND_PACKET_STRUCT {...};'也可以。 3)用更安全更容易的'std :: copy'替換'memcpy' 4)查看智能指針以避免內存泄漏。 – Grizzly 2013-03-22 08:55:37