Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 复制将前3个字节设置为0后删除原始数组指针_C++_Arrays_Pointers_Arduino_Delete Operator - Fatal编程技术网

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

C++ 复制将前3个字节设置为0后删除原始数组指针,c++,arrays,pointers,arduino,delete-operator,C++,Arrays,Pointers,Arduino,Delete Operator,以下程序一直工作到缓冲区大小大约为135。 如果缓冲区变大,前3.5个字节将打印为0。 (在MKR1000 arduino上) 我做错了什么? std::vector在这里更合适吗 谢谢 在这些操作之后,bufferOut是一个无效指针,因为它用来指向的对象已被销毁。这本身并不会导致任何未定义的行为,但您可能只是未能创建,而问题实际上是由于您稍后使用了无效指针造成的 std::vector在这里更合适吗 很可能是的。删除[]临时缓冲区2-您认为让缓冲区指向什么?您刚刚删除了指针后面的内存,只在前

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

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

谢谢

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

std::vector在这里更合适吗


很可能是的。

删除[]临时缓冲区2-您认为让
缓冲区指向什么?您刚刚删除了指针后面的内存,只在前面分配了两行,并在前面一行存储在
bufferOut
中,使其悬空。任何调用未定义行为的进一步取消引用。是的,
std::vector
几乎总是更适合手动内存管理。我们需要实际的、完整的代码。从目前的情况看,这个代码没有意义。在分配和解除分配之间不使用内存,那么为什么要首先分配它呢?另外,第一个函数与第二个函数有什么关系?在copy将前3个字节设置为0后删除原始数组指针-没有合法的方法可以找到这一点。
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);
}
bufferOut = tempBuffer2;
delete[] tempBuffer2;