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

时间:2018-06-12 08:33:57

标签: c++ arrays string

我通过“删除”指令调试时出错,我无法知道原因。我什么时候应该使用删除?

您可以在下面看到代码:

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;
...}

来自调试器的错误:

  

调试错误!        HEAP CORRUPTION DETECTED:在正常块(#152)之后的0x00806F80处。 CRT检测到应用程序写入内存后   堆缓冲区结束。

我不理解的是,如何使用我创建的数组以及在删除deallocate后获得缓冲区错误。

1 个答案:

答案 0 :(得分:1)

在C ++中,字符串以零结尾。因此L"LPD"实际上是字符L, P, D, \0。您需要使用new wchar_t[4]为终止空字符留出空间。