复制后删除原始数组指针将前 3 个字节设置为 0

delete original array pointer after copy sets first 3 bytes to 0

以下程序一直运行到缓冲区大小达到 135 左右。 如果缓冲区变大,前 3.5 个字节将打印为 0。 (在 MKR1000 arduino 上)

uint8_t* bufferOut;
size_t sizeOut;

void SendMessage()
{
    fillBuffer();
    sendBuffer();
}

void fillBuffer()
{
    sizeOut = 12; //just an example
    uint8_t* tempBuffer2 = new uint8_t[sizeOut];
    bufferOut = tempBuffer2;
    delete[] tempBuffer2;
}

void sendBuffer()
{
    Serial.Write(bufferOut, sizeOut);
}

我做错了什么? std::vector 在这里更合适吗?

谢谢!

bufferOut = tempBuffer2;
delete[] tempBuffer2;

经过这些操作后,bufferOut是一个无效的指针,因为它用来指向的对象已经被销毁了。这本身不会导致任何未定义的行为,但可以推测您只是未能创建 mcve,而问题实际上是由您稍后使用无效指针引起的。

Would std::vector be more suitable here?

很有可能,是的。