program.exe中0x010F2F1C处的未处理异常:0xC0000005:访问冲突读取位置0xCCCCCCD0

时间:2014-11-14 09:21:17

标签: c++ pointers memory linked-list

我似乎无法弄清楚为什么我会收到这样的错误:我正在尝试实现链表并对列表进行插入,但是在我的第三行代码中,我遇到了访问错误。 错误:

Unhandled exception at 0x010F2F1C in program.exe: 0xC0000005: Access violation reading location 0xCCCCCCD0.

在我的主要()

list2.InsertNode(1, test);
cout << "cout << list2 " << endl;
cout << list2 << endl;

插入方法

void NodeSLList::InsertNode(int nodeNum, const IntNode &node)
{


    IntNode *prevNode = head;
    for (int i = 1; i < nodeNum; i++)
        prevNode = prevNode->next;

    IntNode * insert;
    insert = new IntNode(node);
    prevNode->next = insert;

    insert->next = prevNode->next->next;

}

在第三行发生错误cout << list2 << endl;(“&lt;&lt;”重载以输出链接列表)

ostream & operator<<(ostream & output, NodeSLList & list)
{
    int size;
    size = list.GetSize();
    output << "List: ";
    for (int i = 1; i <= size; i++)
    {
        output << list.RetrieveNode(i).data<<"    ";
    }
    return output;
}

更具体地,当&lt;&lt;调用operator,并调用GetSize方法,此处发生错误:

    p = p->next;

获取方法:

int NodeSLList::GetSize()
{
    // check to see if the list is empty. if 
    // so, just return 0
    if (IsEmpty()) return 0;

    int size = 1;
    IntNode *p = head;
    // compute the number of nodes and return
    while (p != tail)
    {
        // until we reach the tail, keep counting
        size++;
        p = p->next;
    }
    return size;
}

1 个答案:

答案 0 :(得分:1)

0xcc或0xcccccccc是MSVC用于初始化未由程序显式初始化的局部变量的模式(如果设置了/ GX)。

如果您的p->next因访问0xCCCCCCD0而失败,则表明您的指针p为0xCCCCCCCC。查看您未在此处发布的用于构建列表的代码,并检查是否始终将next设置为正确的值。