Составляя очень простой связанный список, я запутался в том, что, вероятно, является очень простой концепцией области видимости.Первый работает как положено.Казалось бы, во второй функции 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;
}