運行以下代碼時出現分段錯誤。我知道這裏有一些基本的誤解,但我似乎無法弄清楚。分段錯誤 - 查找列表的根目錄
#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);
}
在你的第一個例子,你在結構體中聲明瞭intptr * a'這個指針,但是永遠不會給它一個有效的地址(即不要爲它分配一個地址)。所以它指向一個未定義的位置,並且'*(q.a)= z'將會崩潰。在這兩種情況下,'q'都是函數堆棧中的一個參數,所以它的地址不會與指針變量'a'匹配。 – lurker
更改函數聲明以接受通過引用傳遞的參數解決了問題。 - void printint(intptr&q) –