我正在使用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 < /强>
因此,当试图显示结构的内容时,它返回“分段错误错误”
任何想法,建议??
答案 0 :(得分:1)
您的结构COMMAND_PACKET_STRUCT应该在C ++中定义如下
struct COMMAND_PACKET_STRUCT
{
QString ItemDataName;
DATA_TYPE ItemDataType;
int ItemDataLength;
};
使用默认构造函数来分配空间。
maxSize = ((sizeof(_OA_Packet)/sizeof(COMMAND_PACKET_STRUCT)));
_packetStruct = new COMMAND_PACKET_STRUCT[maxSize];
复制内容。
std::copy(_OA_Packet,_OA_Packet+maxSize,_packetStruct);
_packetStruct是指针,你可能想检查它指向的数据大小。
qDebug() << sizeof(*_packetStruct); // return 4 -->will be 12