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의 크기를 얻을 때, 그것은 4을 제공하면서 의 크기 _OA_Packet은
시도는 구조의 내용을 표시 할 때는 따라서, "분할 오류 오류"
모든 아이디어, 제안에 반환 ??
는'_packetStruct'는 포인터입니다. 'sizeof'는 포인터가 가리키는 메모리의 크기가 아닌 포인터의 크기를 제공합니다. 포인터는 'new'를 사용하여 할당 한 충분한 메모리 위치를 가리 킵니다. 또한 클래스에'memcpy'를 사용해서는 안됩니다. 클래스 대신 복사 할당 연산자'='를 오버로드해야합니다. –
@ Alok, 답장을 보내 주셔서 감사합니다. 처음에는 할당 연산자를 사용해 보았지만 오류는 동일했습니다. 그래서 나는이 개념으로 옮겼다.힌트/예를 들어 주시겠습니까? 내 경우에 뭔가 잘못했을 수도 있니? – skg
몇 가지 사항을 고려해야합니다 (문제와 직접적인 관련이 없음). 1) 대문자는 일반적으로 매크로에 사용되므로 형식에 사용하지 않으려 고합니다 (코드를 읽는 다른 사람들에게 혼란 스러울 수 있음). 2)'typedef struct ... '는 C에서는 유용하지만 C++에서는 불필요합니다. 'struct COMMAND_PACKET_STRUCT {...};'도 똑같이 작동합니다. 3)'memcpy'를 안전하고 쉽게'std :: copy'로 바꾸십시오. 4) 메모리 누수를 피하기 위해 스마트 포인터를 조사하십시오. – Grizzly