来自节点阵列的段故障

时间:2013-02-16 22:52:20

标签: arrays pointers segmentation-fault

我正在开发一个项目,我正在尝试构建一个节点数组作为堆,这样在数组的每个索引中,我都可以存储一个名称和值。基本上我希望我的构造函数将第一个索引的值设置为-1,这样我就可以判断它以后是否为空(值为-1表示空索引)。

问题在于我遇到了一个段错,我不知道为什么。这是错误的代码:

标题文件:

class tripe
{

 public:

  tripe();
  void initialize(string filename); //initialize tripe data struct
  void insert(string name, int grade); //insert given pair into structure
  void search(string prefix); //print list of entries that matches prefix
  void findMin(); //print min grade entry
  void buildheap(string name,string grade,int size);

  heapnode *heap[100]; //TROUBLESOME VARIABLE
  trinode *head;
  trinode *let[25];

};

class heapnode
{

 public:

  string student;
  int score; //WANT THIS TO BE -1 FOR FIRST INDEX OF HEAP ARRAY
};

C ++文件:

tripe::tripe()
{
 for (int i = 0; i < 100; i++)
    {
      heap[i] = NULL;
    }

  heap[1]->score = -1; //SEG FAULT
}

事实上我已经注意到无论何时尝试访问堆数组中的得分变量,我都会得到一个segault。我的构造函数是否需要做其他事情?任何有关此问题的帮助将不胜感激!

P.S。我需要为这个项目使用一个节点数组,所以我的堆的实现不能改变。

1 个答案:

答案 0 :(得分:0)

您正在堆[1]中存储NULL。间接通过NULL时,会出现分段错误。这就是应该发生的事情。 heap不是节点数组,而是指向节点的指针数组。如果这是故意的,那么在实际使用这些指针之前,必须为指向这些指针的指针分配一些内存。既然你说你需要使用“节点数组”,我猜这是真的,因此你需要将你的声明更改为heapnode类型的数组:

heapnode heap[100];

然后您的构造函数可能如下所示:

tripe::tripe()
{
 for (int i = 0; i < 100; i++)
    {
      heap[i].score = -1;
    }
}

显然,对堆中节点的任何其他引用都必须更改为使用“。”。运算符而不是“ - &gt;”。