gpt4 book ai didi

c++ - 为什么一个对象在作为指针传递时超出范围,但在返回时却没有

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:26 26 4
gpt4 key购买 nike

制作一个非常简单的链表我发现自己对什么可能是一个非常简单的作用域概念感到困惑。第一个按预期工作。似乎在第二个 makeNode 函数中,节点“n”在终止时超出范围。我很困惑为什么会这样。

我很确定分配的内存仍然存在,并且两种方法都有指向该内存的指针。那么为什么一个不起作用?

程序有两个make node函数

#include <iostream>
using namespace std;

struct Node
{
int value;
Node* next;
Node() : next(NULL){}
};

Node* makeNode1(int value)
{
Node* n = new Node;
n->value = value;
return n;
}

void makeNode2(int value, Node* mountPt)
{
Node* n = new Node;
n->value = value;
mountPt = n;
}

void destroyNode(Node* mountPt)
{
if(mountPt->next != NULL)
{
destroyNode(mountPt->next);
delete mountPt;
}
}

int main() {
Node* origin = NULL;

// This works
origin = makeNode1(4);

// causes a runtime error when dereferenced
makeNode2(4, origin);

return 0;
}

最佳答案

对于makeNode2,指针参数mountPt本身是按值传递的,然后在函数内部对指针本身进行任何修改,如mountPt = n; 与原始参数 origin 无关。

您可以将其更改为按引用传递,即

void makeNode2(int value, Node*& mountPt)

关于c++ - 为什么一个对象在作为指针传递时超出范围,但在返回时却没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55409073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com