【发布时间】:2015-11-20 20:21:44
【问题描述】:
我有一个名为 Node.js 的结构。 Node 接受一个 double 并将其存储到一个名为 value 的变量中。
我正在尝试创建一个新结构。我的第一个示例有效,但第二个示例无效。第二个示例没有给出编译器错误,它构建得很好,但是当我稍后尝试从节点访问一个值时,它给了我-9.25596e+061。
这段代码运行良好:
Node *firstNode;
Node *newNode = new Node(value);
firstNode = newNode;
这段代码没有:
Node *firstNode;
Node newNode(value);
firstNode = &newNode;
我可以只使用前三行代码,但我想知道为什么其他代码不起作用。是根本错误还是语法稍有偏差?
【问题讨论】:
-
也许这一切都在一个函数中,而
newNode在第二个示例中超出了范围? -
我们需要更多代码。你在哪里使用价值?在另一个函数中?
-
@Pikamander2 第一个分配在堆上并且会一直存在直到你
delete它。第二个被分配为堆栈上的局部变量,一旦函数返回,它将超出范围。那时你有一个无效的指针。 -
@Pikamander2 您需要了解分配内存和使用变量地址之间的区别。如果你看到你可以同时使用这两个,那说明你没有这个理解,你真的需要学习基础知识。
-
@Pikamander2 阅读此learncpp.com/cpp-tutorial/79-the-stack-and-the-heap