C++内存分配问题

2po*_*r10 5 c++ memory visual-studio-2010

我的代码如下:

#include <string.h>
int main()
{
    int ii = 123;
    char str[7] = "";
    strcpy(str,"123456");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在VS2010中运行它,内存如下

在此输入图像描述

我很好奇cc内存中的内容是什么?以及如何cc计算数量?

Mys*_*ial 7

在Visual Studio中编译"Debug"时,cc通常会使用它来填充未初始化的内存.这样,当您访问未初始化的内存时,它会更加明显.

例如,如果您尝试取消引用未初始化的指针,您可能会得到以下内容:

Access Violation accessing 0xcccccccc
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

在此输入图像描述

  • 为什么MS选择"0xCC"作为填充值?因为`0xCC`是x86指令集中的单字节断点指令.这样,如果您不小心执行了未填充的内存,它将立即触发断点. (7认同)
  • @Mysticial:不是真的:它只适用于页面级别(整个页面可以标记为可执行文件,只有当CPU,操作系统和进程都同意启用NX位时).但是如果你从2KB的页面中使用40个字节的代码呢?该页面必须标记为可执行文件,这使页面的其余部分可执行,但包含垃圾:) (2认同)