我有以下代码可以100%正常工作。我也知道,这背后的实际情况。怎么"新"适用于那种情况。
struct ABC{
int data = 1234;
};
ABC *obj = new ABC;
cout << "obj->data";
以下代码无法正常编译然后崩溃。没有语法或编译错误。
struct ABC{
int data = 1234;
};
ABC *obj; // please explain??
cout << "obj->data";
以下代码也可以正常使用。
struct ABC{
int data = 1234;
};
ABC *obj, myobj;
myObj = &obj;
cout << "obj->data";
我也知道,其中一个正在工作。 rd 请解释,为什么2 nd 一个不起作用。很抱歉没有制作main()程序。
答案 0 :(得分:1)
在第一个示例中,您为结构分配内存并通过调用&#34; new&#34;来初始化此结构。并且obj将包含该结构内存开头的地址。
在第二个例子中,变量 obj 是一个指针,它没有被初始化。所以它指向一个随机的内存地址。
当您尝试从此内存地址(位于 obj 中存储的地址)中读取值时,可能会发生以下两种情况:
在调试配置中构建的程序中,未初始化的变量默认为零。因此,您的 obj 将指向地址0,读取操作系统将其识别为错误。在Release配置中,所有未初始化的variabled都不会被强制为零 - 每个值都可能存在。