为什么我遇到缓冲区错误?

Why am I experiencing a buffer error?

本文关键字:错误 缓冲区 遇到 为什么      更新时间:2023-10-16

我在使用"删除"指令进行调试时遇到错误,我不知道为什么。何时应使用删除?

下面你可以看到代码:

int GenerateOrderData(SetupData &mySetupData, OrderData &myOrder, int Level, wchar_t *buffer, bool normalAOC, int theActualCutsinPlatform)
{
int Size = 0;
if ( buffer != NULL )
{
//INIT
wchar_t* lString = new wchar_t[3];
swprintf(lString, L"%s", L"LPD");
Size += swprintf(buffer+Size, L"%c%02d%s", Communication::UNICODE_STX, numMSG, lString);
delete[] lString;
...}

以及来自调试器的错误:

调试错误! 检测到堆损坏:在0x00806F80的正常块 (#152( 之后。CRT 检测到应用程序在以下时间后写入内存 堆缓冲区结束。

我不明白的是,我创建的数组以及使用删除解除分配后如何出现缓冲区错误。

在C++中,字符串以零结尾。所以L"LPD"其实是角色L, P, D, 。您需要使用new wchar_t[4]为终止空字符留出空间。