新的 KeyWord c++(需要帮助)

new KeyWord c++ (Assistance Required)

  1. 我有以下代码可以 100% 正常工作。我也知道,幕后究竟发生了什么。 "new" 在这种情况下是如何工作的。

    struct ABC{
        int data = 1234;
    };
    ABC *obj = new ABC;
    cout << "obj->data";
    
  2. 下面的代码不能正常编译,然后就崩溃了。没有语法或编译错误。

    struct ABC{
        int data = 1234;
    };
    ABC *obj; // please explain??
    cout << "obj->data";
    
  3. 以下代码也可以正常工作。

    struct ABC{
        int data = 1234;
    };
    ABC *obj, myobj;
    myObj = &obj;
    cout << "obj->data";
    

我也知道,第 3rd 个是如何工作的。请解释为什么 2nd 一个不起作用。很抱歉没有制作 main() 程序。

在第一个示例中,您为结构分配内存并通过调用 "new" 初始化该结构。 obj 将包含该结构内存开头的地址。

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

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

  1. 如果 obj 指向由 OS 分配给您的程序的内存块,您将收到一些位于该地址的值。
  2. 如果 obj 指向其他内存块,OS 会发现它并关闭您的应用程序。

在Debug配置构建的程序中,未初始化的变量默认初始化为零。因此,您的 obj 将指向地址 0,OS 将其读取为错误。在发布配置中,所有未初始化的变量都不会强制变为零 - 每个值都可能存在。