分段错误 - 查找列表的根
Segmentation fault - finding the root of a list
我在运行以下代码时遇到分段错误。我知道我对这里的指针有一些基本的误解,但我似乎无法弄清楚。
#include <iostream>
using namespace std;
struct intptr{
intptr* a;
int value;
};
void printint(intptr q){
if (q.a == &q){
cout<<q.value<<endl;
return;
}
else
printint(*(q.a));
}
int main(){
intptr y,z;
z.value = 1;
y.value = 2;
*(y.a) = z;
*(z.a) = z;
printint(x);
}
我也尝试过以下方法,但它从未认识到q.a = &q
是正确的。
#include <iostream>
using namespace std;
struct intptr{
intptr* a;
int value;
};
void printint(intptr q){
if (q.a == &q){
cout<<q.value<<endl;
return;
}
else
cout<<"not finished"<<endl;
printint(*(q.a));
}
int main(){
intptr y,z;
z.value = 1;
y.value = 2;
y.a = &z;
z.a = &z;
printint(y);
}
这是你的问题:
*(y.a) = z;
*(z.a) = z;
您正在取消引用null pointer
。a
变量从未初始化,并且不指向任何内容。如果您要使用指针,我强烈建议您遵循 3 法则。
为了找到问题并避免将来出现类似问题,建议初始化指向 NULL 的指针,并在操作它们之前检查 NULL。我建议您在结构中添加一个构造函数并初始化指针 a:
struct intptr
{
intptr* a;
int value;
intptr()
: a(NULL)
{ }
};
这个问题已经被@awesomeyi指出
了请尝试以下代码:
y.a = &z;
z.a = &y;
相关文章:
- 如何在等效列表中查找最小的连接标签
- 在链接列表中查找元素 - C++
- 如何在随机数列表中查找大于或小于的元素
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 使用特征查找两个列表之间的差异
- 在地图和列表之间查找标准容器
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 如何在数组或链接列表中查找特定字符串
- 如何查找结构列表项
- 查找可变参数列表的字符串格式指定符
- 穿过链接列表以查找字符串
- 通过查找一对项目的代码获取错误的输出,在给定的总和相等的给定列表中列表
- 在数据类型类的列表中查找 elem
- 迭代列表以查找元素的出现.代码问题
- 查找XOR列表的初始值
- 快速的唯一组合(来自重复项列表),无需查找
- 从列表到数组C 查找模式或最常见的数字
- 在字符串列表中查找字符串,然后将字符串设置为找到的字符串?
- 模板初始化列表-查找失败的原因
- 使用列表查找map中的元素