【发布时间】:2021-06-27 16:32:02
【问题描述】:
我一直在尝试重新使用 C++,但遇到了一个我无法解决的问题。在下面的示例中,我创建了一个结构节点和一个类 C。该类包含一个映射。该类有一个 get 和一个 set 函数。我面临的问题是,一旦我执行了 get 函数,节点的值就会改变。下面代码的输出如下:
4
32766
32766
如您所见,一旦我执行 set 函数,值就会发生变化。如果有人知道问题出在哪里,请告诉我。
谢谢。
#include <iostream>
#include <map>
using namespace std;
struct Node {
int value;
Node(int v):value(v){};
};
class C {
public:
map<int, Node*> m;
C() {};
void set(int key, int value) {
Node n = Node(value);
m.insert(pair<int,Node*>(key, &n));
}
int get(int key) {
return m[key]->value;
}
};
int main() {
C t = C();
t.set(1,4);
cout << t.m[1]->value << endl;
cout << t.get(1) << endl;
cout << t.m[1]->value << endl;
}
【问题讨论】:
-
您的代码有未定义的行为。您正在将一个指向
set中的对象的指针存储在对函数的调用之外。m.insert(pair<int,Node*>(key, &n));不好。 -
你可能只想在这里使用
std::map<int, Nome>而不是使用指针。