【发布时间】:2014-11-14 09:21:16
【问题描述】:
我似乎无法弄清楚为什么会出现这样的错误:我正在尝试实现链表并插入到列表中,但是在我的第三行代码中我遇到了访问错误。 错误:
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;("
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;
}
更具体地说,当调用
p = p->next;
getsize 方法:
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;
}
【问题讨论】:
-
在您的代码中的某个地方,您正在使用尚未写入的数据(从外观上看,偏移 4 到某种结构或类中) - 也许您的构造函数
IntNode没有将next设置为0/NULL/nullptr? -
通常,
0xCCCCCCD0之类的值表示您正在从某处未初始化的变量中读取数据。这是什么?insert->next = prevNode->next->next-- 因为prevnode->next设置为insert,这不会导致将一个next设置为相同的另一个next? -
insert->next = prevNode->next->next 将插入的节点设置为链表上的下一个值 prev 节点 -> 插入的节点 -> (prevNode->next->next)
标签: c++ pointers memory linked-list