[英]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);
}
我也嘗試了以下方法,但是它從未意識到qa = &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);
}
為了發現問題並在將來避免類似的問題,建議初始化指向NULL的指針,然后在操作它們之前檢查NULL。 我建議您將構造函數添加到您的結構並初始化指針a:
struct intptr
{
intptr* a;
int value;
intptr()
: a(NULL)
{ }
};
該問題已由@awesomeyi指出
嘗試以下代碼:
y.a = &z;
z.a = &y;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.