首页 > 解决方案 > 为什么我遇到缓冲区错误?

问题描述

我使用“delete”指令进行调试时出错,我不知道为什么。什么时候应该使用删除?

下面你可以看到代码:

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 检测到应用程序在堆缓冲区结束后写入内存。

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

标签: c++arraysstring

解决方案


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


推荐阅读