簡體   English   中英

細分錯誤-查找列表的根

[英]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);
}

這是您的問題:

  *(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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM