C++ 数组值意外更改

C++ 数组值意外更改,c++,C++,在第一行,获取输入n(节点数),m(边数),start(起始节点数),并获取无向m边/ 最后,我想打印出dfs结果。但是,当我使用节点*时,它会发生变化。我不打算改变 class Node { private: int n; Node* next = 0; public: Node(int _n) { n = _n; } Node() {}; Node* getNext() { return next; }

在第一行,获取输入
n
(节点数),
m
(边数),
start
(起始节点数),并获取无向
m
边/ 最后,我想打印出dfs结果。但是,当我使用
节点*
时,它会发生变化。我不打算改变

class Node {
private:
    int n;
    Node* next = 0;
public:
    Node(int _n) {
        n = _n;
    }
    Node() {};
    Node* getNext() {
        return next;
    }
    void setNext(Node* ptr) {
        next = ptr;
    }
};
下面的代码是主要问题

Node* arr = new Node[n + 1];// use 1 to n

for (int i = 1; i <= m; i++) {
    int num1 = 0, num2 = 0;
    cin >> num1 >> num2;

    if (!arr[num1].getNext())
        arr[num1].setNext(&Node(num2));
    else {
        Node* tptr = arr[num1].getNext();
        while (tptr->getNext()) tptr = tptr->getNext();
        tptr->setNext(&Node(num2));
    }
}
我期望的结果结构是arr[1]>2->3->4,但实际结果是arr[1]>2->4->4


我不明白值为什么会更改。

arr[num1].setNext(&Node(num2))出错。
arr[i]
似乎未初始化。我尝试了“Node temp=Node(num2)或Node*temp=&Node(num2)”。但它不起作用。值会发生变化。我认为内存地址不会改变我所做的任何事情。
Node*temp=&Node(num2)
也有同样的问题。对于
Node temp=Node(num2)
temp
应该比
arr[num1]
寿命长。您可能需要
arr[num1].setNext(&arr[num2])
Node*arr=new Node[n+1]--一般来说,拥有指针被认为是一件坏事,而且自从C++11带给我们以来就已经过时了。
4 5 1
1 2
1 3
1 4