复制后删除原始数组指针将前 3 个字节设置为 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,问题实际上是由您后来使用无效指针引起的。

std::vector在这里会更合适吗?

最有可能的是,是的。

最新更新