运行以下代码时出现分段错误。我知道有一些基本的东西我对这里的指针有误解,但我似乎无法弄明白。
#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);
}
答案 0 :(得分:3)
答案 1 :(得分:0)
要查找问题并避免将来出现类似问题,建议将指针初始化为NULL,然后在操作之前检查NULL。我建议你在结构中添加一个构造函数并初始化指针a:
struct intptr
{
intptr* a;
int value;
intptr()
: a(NULL)
{ }
};
答案 2 :(得分:0)
@awesomeyi指出了这个问题
请尝试以下代码:
y.a = &z;
z.a = &y;