return bufDataIn[3];
означает «вернуть 4-й элемент массива bufDataIn
», и в этом случае это приводит к неопределенному поведению, поскольку размер этого массива равен 3.
Вы можете выделить память для этого нового массива втело вашей функции и возврат указателя на ее первый элемент:
BYTE* createArray(...)
{
BYTE* bufDataOut = new BYTE[3];
....
return bufDataOut;
}
Не забудьте delete
когда закончите с ним:
{
BYTE* myArray = createArray(...);
...
delete[] myArray;
}
Еще лучше, используйтеstd::vector<BYTE>
и избавьтесь от этого уродливого управления памятью с его помощью;) Это гарантирует, что память будет должным образом освобождена на любом пути возврата, даже когда генерируются исключения.