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

时间:2015-12-25 17:46:44

标签: pointers c++11 struct new-operator

  1. 我有以下代码可以100%正常工作。我也知道,这背后的实际情况。怎么"新"适用于那种情况。

    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";
    
  4. 我也知道,其中一个正在工作。 rd 请解释,为什么2 nd 一个不起作用。很抱歉没有制作main()程序。

1 个答案:

答案 0 :(得分:1)

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

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

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

  1. 如果obj指向操作系统分配给您的程序的内存块,您将收到一些存在于此地址的值。
  2. 如果obj指向某个其他内存块,则操作系统会找到它并关闭您的应用程序。
  3. 在调试配置中构建的程序中,未初始化的变量默认为零。因此,您的 obj 将指向地址0,读取操作系统将其识别为错误。在Release配置中,所有未初始化的variabled都不会被强制为零 - 每个值都可能存在。