分段错误 - 查找列表的根

时间:2014-02-26 02:53:10

标签: c++ pointers linked-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);
}

3 个答案:

答案 0 :(得分:3)

这是你的问题:

  *(y.a) = z;
  *(z.a) = z;

您正在取消引用null pointera变量从未初始化并且指向任何内容。如果您打算使用指针,我强烈建议您关注rule of 3

答案 1 :(得分:0)

要查找问题并避免将来出现类似问题,建议将指针初始化为NULL,然后在操作之前检查NULL。我建议你在结构中添加一个构造函数并初始化指针a:

struct intptr
{
   intptr* a;
   int value;

   intptr()
   : a(NULL)
   { }
};

答案 2 :(得分:0)

@awesomeyi指出了这个问题

请尝试以下代码:

  y.a = &z;
  z.a = &y;