节点分段故障

时间:2015-10-02 23:20:19

标签: c++ list unix nodes

在这段代码中,当我尝试插入链表的前面时,我一直遇到分段错误。我认为这与头部没有正确改变有关。在这个程序中,篮子是节点。我使用的调试器指向函数的最后一行作为问题,但我不确定它的来源。

include <cstdlib>
#include <iostream>
#include <ctime>
#include "BasketList.h"

using namespace std;

Basket::Basket(int _datum, Basket * _next):
   egg_num(_datum), nextBasket(_next)
{}


int Basket::getEggs() const
{
   return egg_num;
}


Basket const* Basket::getNextBasket() const
{
   return nextBasket;
}


BasketList::BasketList() :
head (NULL)
{}

void BasketList::insertBasket(int eggs)
{
   Basket *currPtr = head;
   Basket *prevPtr = NULL;
   Basket *newBasketPtr;

   if(eggs  < head->egg_num)
   {
   currPtr->nextBasket = head;
   head = currPtr;
   }


   while(currPtr != NULL && eggs > currPtr->egg_num)
   {
      prevPtr = currPtr;
      currPtr = currPtr->nextBasket;
   }

   newBasketPtr = new Basket(eggs, currPtr);
   prevPtr->nextBasket = newBasketPtr;

}

1 个答案:

答案 0 :(得分:0)

在使用head之前,您需要先测试NULL

您的构造函数将head设置为NULL,然后当您调用insertBasket时,它所做的第一件事就是取消引用指针head

我认为你可以完全摆脱insertBasket中的第一个if语句(及其内容) - 循环应该做你想要的。如果prevPtr为NULL,您只需要检查结尾,如果是,请将head设置为newBasketPtr