c++ - 为什么我遇到缓冲区错误?
问题描述
我使用“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++ 中,字符串以零结尾。L"LPD"
实际上字符也是如此L, P, D, \0
。您需要使用new wchar_t[4]
为终止空字符留出空间。
推荐阅读
- c - 警告从没有强制转换的指针中生成整数
- javascript - 如何在本机反应中进行条件渲染
- react-native - 如何在本机反应中请求 iOS 存储权限?
- android - Android MP 图表在 x 轴上以 dd-MM-yyyy 格式设置日期
- mysql - 如何找到唯一索引的名称?MySQL
- python-2.7 - 运行多个函数
- android - 使用 Rect 将视图添加到特定位置的布局
- c# - ASP.Net - Mvc5:LINQ,保存重复记录问题
- jquery - 用 django HttpResponse 中的 ajax 替换正文内容的问题
- http - 使用 LE 集成设置 Traefik - 错误太多重定向 / 302