下面的程序可以工作直到缓冲区大小达到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在这里更合适吗?
谢谢!
答案 0 :(得分:0)
bufferOut = tempBuffer2; delete[] tempBuffer2;
这些操作之后,bufferOut
是无效的指针,因为它曾经指向的对象已被破坏。这样做本身并不会导致任何不确定的行为,但是大概您只是创建mcve失败了,而问题实际上是由您稍后使用无效指针引起的。
std :: vector在这里更合适吗?
很有可能,是