Buffers.h
Код: Выделить всё
#define BUF_LEN 1200
extern uint16_t mybuf1[BUF_LEN];
extern uint16_t mybuf2[BUF_LEN];
Код: Выделить всё
uint16_t mybuf1[BUF_LEN] = { 0 };
uint16_t mybuf2[BUF_LEN] = { 0 };
Код: Выделить всё
#include "Buffers.h"
void GetBuffer(int index, uint16_t *pData, int dataLen)
{
uint16_t *bufPtr = (index == 0) ? mybuf1 : (index == 1) ? mybuf2 : nullptr;
if (pData)
{
memcpy(pData, bufPtr, dataLen * (int)sizeof(uint16_t));
}
}
Код: Выделить всё
uint16_t *pData = new uint16_t[BUF_LEN];
GetBuffer(0, pData, BUF_LEN);
// do stuff
delete[] pData;
Я пробовал отладку с помощью отладчика и кажется, что все указатели указывают на правильные адреса. bufPtr указывает на тот же адрес, что и mybuf1, как и ожидалось, а pData правильно выделен.
Странно то, что при изменении функции GetBuffer для использования mybuf1< /code> непосредственно как указатель на источник, все работает хорошо:
Код: Выделить всё
memcpy(pData, mybuf1, dataLen * (int)sizeof(uint16_t));
Подробнее здесь: https://stackoverflow.com/questions/793 ... o-an-array