【发布时间】:2017-09-09 10:57:45
【问题描述】:
阅读how new works in C++ 我尝试了以下代码:
#include <iostream>
using namespace std;
struct A { int m; }; // POD
int main()
{
A* a = new A;
cout<<"A m="<<a->m<<endl;
return 0;
}
并且输出总是“A m=0”。 为什么它不显示残值,我怎样才能让它这样做?
附加信息:在 Ubuntu 16.04 上使用 5.4.0 20160609。尝试使用 -std=C++ 03、98 和 11 标准进行编译
【问题讨论】:
-
是什么让 0 的残差比 42 少?你也应该在“发布模式”下编译。
-
成员变量的内容是indeterminate。以任何方式使用它,除了初始化它是 C++ 中的undefined behavior。
-
未定义的行为是未定义的,停止推理。这真的没有建设性。
-
这是程序中第一次使用
new。会有什么样的“剩余价值”?请注意,大多数操作系统会在运行之间清除内存,因此您的程序无法窥探前一个程序所做的事情。
标签: c++ memory initialization new-operator