【发布时间】:2021-11-28 19:47:00
【问题描述】:
我最近得知 MSVC 的未初始化堆栈内存的调试模式标记是 0xCCCCCCCC。我现在很担心;虽然不太可能,但如果 malloc()/new/any 指针巧合地作为 this 指针结束会发生什么?它会抛出错误吗?这会导致重要系统出现问题吗?
【问题讨论】:
-
“如果 malloc()/new/any 指针巧合地作为 this 指针结束会发生什么?” 这当然不会发生,MS 开发人员似乎不会最聪明的,但他们没有那么愚蠢。
-
0xCCCCCCCC 没有什么神奇或特别之处。如果 malloc()/new 最终从该位置的堆中分配,那么它将是一个有效位置。
-
这是一个陷阱值……它本身就在非法地址范围内。它允许识别未初始化的存储。巧合的是 HeapAlloc 之类的用 0xbaadf00d 初始化内存
-
不会发生,该地址只能映射到 ring0 页面(操作系统内核和驱动程序)。从而可靠地生成 AVE。 docs.microsoft.com/en-us/windows/win32/memory/…
-
“如果 malloc()/new/any 指针巧合地作为 this 指针结束会发生什么?” -- 好主意。你能想出比
0xCCCCCCCC更好的东西来用作标记吗?关于为什么 MSVC 不使用您的“更好”的想法有什么想法吗?
标签: c++ c visual-studio visual-c++