复制后删除原始数组指针将前 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?
很有可能,是的。
以下程序一直运行到缓冲区大小达到 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?
很有可能,是的。