访问冲突读取位置:链接列表c ++

时间:2012-05-18 16:16:44

标签: c++ linked-list nodes

我正在尝试执行int值的链接列表。我将3个int值添加到列表中,然后打印它们但是打印出3个值后出现问题,程序返回打印功能打印第4个因为(tempNode!= NULL)给出true但是打印后应该为NULL 3个值,因此它在cout << "index " << size-- << ", value: "<< tempNode->num << endl;

的打印方法中给出了访问冲突读取错误

它超出了我的列表节点,但我不知道哪里出错了。

请帮助,2天我想弄明白。

以下代码。

IntList::IntList()
{
    first = NULL;
    last = NULL;
    size = 0;
}


 IntList::Node::Node(const int& info, Node* next = NULL)
 {
    num = info;
    next = next;
 }


 IntList::~IntList()
 {
    Node* tempNode = first;
    while ( tempNode != NULL )
    //for(int i = 0; i < size; i++)
    {
        Node* nextNode = tempNode->next;
        delete tempNode;
        tempNode = nextNode;
    }

    first = last = NULL;
    size = 0;
  }


IntList::IntList(const IntList& wl)
{
     cout << "here word list copy conts " << endl;

     first = last = NULL;
     size = wl.size;
     if(wl.first != NULL){

        Node* tempNode = wl.first;
        for(int i = 0; i < wl.size; i++)
        {
              addLast(tempNode->num);
              tempNode = tempNode->next;
        }
     }
}


IntList& IntList::operator = (const IntList& wl)
{
    cout << "here word list =" << endl;
    if(this == &wl)
        return *this;

    Node* tempNode = first;
    while ( tempNode != NULL )
    {
        Node* nextNode = tempNode->next;
        delete tempNode;
        tempNode = nextNode;
    }

    first = NULL;
    last = NULL;

    if(wl.first != NULL)
    {
        for(int i = 0; i < wl.size; i++)
        {
           addLast(tempNode->num);
           tempNode = tempNode->next;
           size++;
    }
}

return *this;
}

 void IntList::addFirst(int& winfo)
{
    Node* firstNode = new Node(winfo);
    //Node firstNode(winfo);
    if(first == NULL) 
    {
        first = last = firstNode;
    }
    else 
    {
        firstNode->next = first;
        first = firstNode;  
    }
    //increment list size
    size++;
}

void IntList::print(ostream& out)
{
    Node* tempNode = first;
    while ( tempNode != NULL )
    {
        out << "\t";
        cout << "index " << size-- << ", value: "<< tempNode->num << endl;
        tempNode = tempNode->next;
    }
 }

1 个答案:

答案 0 :(得分:2)

next构造函数的Node参数会影响其next成员,因此next = next正在分配参数。
重命名其中一个。

此外,请勿在打印时修改size