我正在为课堂上的实验室编写代码,这是使用循环链表进行 OOD 设计的练习。这只是意味着我无法访问一些使用的关键功能。但是,我很困惑,因为尽管我的驱动程序模仿了教授写的驱动程序,但标题中仍然出现 mchk 错误。这是它引用的代码
{
int nNodesFreed{0};
node* n{head};
for(; n!= head || ! nNodesFreed; n = n->next) {
delete n;
nNodesFreed++;
}
cout << "# nodes freed: " << nNodesFreed << endl;
}
我在一个类似的问题中看到问题可能是我正在尝试访问已被释放的内存。IE 如果 n 不再存在,如何 n = n->next。我尝试使用当前指针和下一个指针切换到 while 循环,但这使问题变得更糟。该代码在我教授的作业版本中完美运行,我还没有实现我需要的功能。
我给出的确切错误是:
Invalid read of size 8
at 0x400D8A: main (lab04.cpp:28) // this references the for loop
Address 0x5a02048 is 8 bytes inside a block of size 16 free'd
at 0x4C28FAC: operator delete(void*)
by 0x400D81: main (lab04.cpp:29)
谢谢你的帮助