Проблема в том, что Byte packetBuffer[size+100]
объявляет локальный массив, к которому нельзя обращаться после выхода из этого метода.У вас есть два варианта (которые я напишу как функции):
Вариант 1:
MIDIPacketList *makePacketList(const UInt8 *data, UInt32 size) {
Byte *packetBuffer = malloc(size + 100);
MIDIPacketList *packetList = (MIDIPacketList*)packetBuffer;
MIDIPacket *packet = MIDIPacketListInit(packetList);
MIDIPacketListAdd(packetList, sizeof(packetBuffer), packet, 0, size, data);
return packetList;
}
Если вы сделаете это таким образом, вам придется free()
буфер позжеon, что является своего рода болью.
Вариант 2:
MIDIPacketList *makePacketList(Byte *packetBuffer, const UInt8 *data, UInt32 size) {
MIDIPacketList *packetList = (MIDIPacketList*)packetBuffer;
MIDIPacket *packet = MIDIPacketListInit(packetList);
MIDIPacketListAdd(packetList, size + 100, packet, 0, size, data);
return packetList;
}
В этом случае вам придется объявить Byte packetBuffer[size + 100]
вне функции и передать его какпервый аргумент, который также несколько неудобен.