c++ - 在 C++ 中使用构造函数时结构数据发生变化
问题描述
第一个代码按预期工作。我正在尝试在结构内使用双指针。
#include "bits/stdc++.h"
using namespace std;
struct Node{
int data;
Node *left;
Node* right;
Node(int val) {
data = val;
left = right = NULL;
}
};
struct Triplet{
Node** node;
int pval, lchild;
};
int main()
{
Node *root = new Node(10);
Triplet t;
t.node = &root;
t.pval = 1001;
t.lchild = 2;
cout << (*t.node)->data << " " << t.pval << " " << t.lchild << "\n";
cout << (*t.node)->data << " " << t.pval << " " << t.lchild << "\n";
cout << (*t.node)->data << " " << t.pval << " " << t.lchild << "\n";
return 0;
}
以下是正确和预期的输出
10 1001 2
10 1001 2
10 1001 2
但是当我尝试使用相同的逻辑但使用构造函数时,我会在cout
调用第一个之后得到随机值。这不限于cout
,如果双指针被访问一次,它将在下一次调用时改变。
#include "bits/stdc++.h"
using namespace std;
struct Node{
int data;
Node *left;
Node* right;
Node(int val) {
data = val;
left = right = NULL;
}
};
struct Triplet{
Node** node;
int pval, lchild;
Triplet(){}
Triplet(Node* temp, int a, int b){
node = &temp;
pval = a;
lchild = b;
}
};
int main()
{
Node *root = new Node(10);
Triplet t(root, 1001, 2);
cout << (*t.node)->data << " " << t.pval << " " << t.lchild << "\n";
cout << (*t.node)->data << " " << t.pval << " " << t.lchild << "\n";
cout << (*t.node)->data << " " << t.pval << " " << t.lchild << "\n";
return 0;
}
异常输出:
10 1001 2
1878374340 1001 2
1878374340 1001 2
解决方案
在您的非构造函数版本中,t.node
保存root
.
t.node = &root;
在您的构造函数版本中,t.node
保存 的地址temp
,这确实是一个临时的。一旦不再存在,它就会变成一个悬空指针。temp
node = &temp;
为了匹配您的非构造函数版本,您的构造函数需要采用Node**
.
struct Triplet{
Node** node;
int pval, lchild;
Triplet(){}
Triplet(Node** temp, int a, int b){
node = temp;
pval = a;
lchild = b;
}
};
int main()
{
Node *root = new Node(10);
Triplet t(&root, 1001, 2);
推荐阅读
- javascript - 调试 JavaScript Freecodecamp 挑战
- javascript - HTML 不呈现 JS 中给出的标签位置
- asp.net-mvc - 在会话变量中保存每个用户的 utc 偏移量,如果用户移动到另一个时区或会话过期,则刷新它
- java - 绑定属性
> 到 ListView(使用 SelectionMode.MULTIPLE) - python - python绘制非线性方程
- r - R:拆分字符列并创建两个新的
- html - 有角度的边框上的框阴影:伪元素之后
- android - 自定义视图的 ConstraintLayout 基线对齐支持
- ios - ContactPicker Swift4 中的限制选择
- python - 如何使python模拟函数返回以函数参数为条件的特定值?