复制将前三个字节设置为0

时间:2020-05-18 10:22:02

标签: c++ arrays pointers arduino delete-operator

下面的程序可以工作直到缓冲区大小达到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在这里更合适吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

bufferOut = tempBuffer2;
delete[] tempBuffer2;

这些操作之后,bufferOut是无效的指针,因为它曾经指向的对象已被破坏。这样做本身并不会导致任何不确定的行为,但是大概您只是创建mcve失败了,而问题实际上是由您稍后使用无效指针引起的。

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

很有可能,是

相关问题