释放内存时获得"Heap Corruption Detected: after Normal block"
Getting "Heap Corruption Detected: after Normal block" when freeing memory
我只是想通过以下代码测试内存分配和删除:
char* t = new char[20]();
char* t2 = t + 22;
*t2 = 0x01;
printf("I am heren");
delete[] t;
首先,at "char* t2 = t + 22;"我知道我可能正在访问一个无效的内存插槽。然而,只是为了测试,我仍然这样做。在许多幸运的情况下,我在"*t2 = 0x01;"处没有出现错误。但是"delete[] t;"总是引发"HEAP CORRUPTION DETECTED: after Normal block(#56)"错误。为什么呢?
注意:我担心的是,为什么它没有引发异常后"*t2 = 0x01;"?为什么要等到"delete[] t;"?
未定义行为是未定义的-任何事情都可能发生。
在这种情况下,最可能发生的具体事情是堆管理器过度分配了您的t
,并在分配的内存之后放置了哨兵字节。当您释放内存时,它会检查这些哨兵字节,当它们发生更改时,它会标记堆损坏。
相关文章:
- 为什么此代码中显示"*** stack smashing detected ***: <unknown> terminated Aborted (core dumped) "错误?
- cuda-gdb 给出错误"warning: Cuda API error detected: cudaLaunchKernel returned (0x7)"
- "terminate called after throwing an instance of std::invalid_argument' what(): stoi ?"
- NDK 构建中的异常"error: expected ';' after top level declarator"
- 标准::复制失败,"cannot seek vector iterator after end"
- std::bind and stack-use-after-scope
- 如何在C++应用程序中重现"Stack smashing detected"
- C++:在字符串数据类型中创建单词"letter after letter"
- 尝试运行 NVIDIA FleX 时"buffer overflow detected"
- What value should `std::stringstream::fail()` return after r
- "used after it was moved [bugprone-use-after-move]"警告在这里是一个真正的问题吗?
- 为什么这段代码会导致"heap corruption detected"?
- 为什么一旦ZeroMQ C++客户端针对python服务器运行,"stack smashing detected"?
- GL_INVALID_ENUM right after context initialization
- 如何在 C++ 中继续该函数而不退出 after else 语句
- 缩小 C++11 中的转换范围:"actual value after conversion"是什么?
- 堆叠C++代码工作正常,但在运行代码结束时"glibc detected"
- "Explicit specialization of std::iterator_traits<char *> after instantiation"(咕)
- Segfault after the return 0;
- 释放内存时获得"Heap Corruption Detected: after Normal block"