Pointers 新关键字c++;(需要协助)

Pointers 新关键字c++;(需要协助),pointers,c++11,struct,new-operator,Pointers,C++11,Struct,New Operator,我有以下代码,工作100%良好。我也知道,幕后到底发生了什么。在这种情况下,“新”是如何工作的 struct ABC{ int data = 1234; }; ABC *obj = new ABC; cout << "obj->data"; 结构ABC{ int data=1234; }; ABC*obj=新ABC; cout在第一个示例中,您为一个结构分配内存,并通过调用“new”来初始化该结构。obj将包含一个指向该内存结构开头的地址 在第二个示例中,变量obj是

我有以下代码,工作100%良好。我也知道,幕后到底发生了什么。在这种情况下,“新”是如何工作的

struct ABC{
    int data = 1234;
};
ABC *obj = new ABC;
cout << "obj->data";
结构ABC{ int data=1234; }; ABC*obj=新ABC;
cout在第一个示例中,您为一个结构分配内存,并通过调用“new”来初始化该结构。obj将包含一个指向该内存结构开头的地址

在第二个示例中,变量obj是指针,未初始化。所以它指向一个随机内存地址

当您试图从此内存地址(位于存储在obj中的地址)读取值时,可能会发生两种情况:

  • 若obj指向操作系统分配给您的程序的内存块,您将收到一些值,该值位于该地址
  • 如果obj指向其他内存块,操作系统就会发现并关闭应用程序

  • 在调试配置中构建的程序中,未初始化的变量默认为零。因此,您的obj将指向地址0,从中读取的内容被操作系统识别为错误。在版本配置中,所有未初始化的variabled不会强制变为零-每个值都可能存在。

    无法复制,打印字符串工作正常。您确定代码中的“cout data”行吗?所有3个示例都必须使用text=“obj->data”打印相同的字符串如果没有引号,2中的崩溃很容易解释,因为obj指向未初始化的内存,取消引用它是未定义的行为,通常被视为崩溃。
    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";