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))当您存储临时对象的指针时,code>出错。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