То, что делает recv
, копирует данные из внутреннего буфера в тот, который вы предоставляете.Таким образом, он перезаписывает содержимое вашей структуры.Вы также изменяете член массива на другой указатель, который является нет-нет.И не только это, вы пытаетесь установить для него массив, который на меньше , чем существующий массив, что может привести к recv
возможному перезаписи памяти вне вашего нового массива.
Вам нужносделать что-то вроде этого:
void func(int* out, int maxnum)
{
inPacket inpacket;
recv(m_socket, (char*)&inpacket, sizeof(inPacket));
memcpy(out, inpacket.numbers, sizeof(int) * maxnum);
}
Затем вы вызываете функцию следующим образом:
int numbers[10];
func(numbers, 10);
Редактировать: Если требуется динамический массив, то вызовrecv
должны быть изменены вместе со структурой:
typedef struct inPacket{
int cmd;
int seqNo;
int numbers[0];
} inPacket;
void func(int* out, int maxnum)
{
size_t packetSize = sizeof(inPacket) + sizeof(int) * maxnum;
inPacket *inpacket = malloc(packetSize);
recv(m_socket, inpacket, packetSize);
memcpy(out, inpacket->numbers, sizeof(int) * maxnum);
free(inpacket);
}