C++ 由于信号10(SIGBUS),调试器已退出
这就是我在尝试测试双链接列表的C++ 由于信号10(SIGBUS),调试器已退出,c++,C++,这就是我在尝试测试双链接列表的remove\u at()功能时遇到的运行时错误。知道为什么会这样吗?我已经检查了我的算法,没有发现任何错误。或者,如果可能的话,请帮我用一个更简单的程序来完成 template <class T> void List<T>::remove_at(unsigned remIdx) { if (remIdx > (size - 1)) { throw("Out-of-bounds error."); }
remove\u at()
功能时遇到的运行时错误。知道为什么会这样吗?我已经检查了我的算法,没有发现任何错误。或者,如果可能的话,请帮我用一个更简单的程序来完成
template <class T> void List<T>::remove_at(unsigned remIdx) {
if (remIdx > (size - 1)) {
throw("Out-of-bounds error.");
} else {
node* curNodePtr = firstNodePtr;
for (unsigned k = 0; k < remIdx; ++k)
curNodePtr = curNodePtr->nextNodePtr;
(curNodePtr->prevNodePtr)->nextNodePtr = curNodePtr->nextNodePtr;
(curNodePtr->nextNodePtr)->prevNodePtr = curNodePtr->prevNodePtr;
delete curNodePtr;
}
}
这不是编译器,而是运行时错误。。。很可能是从结构节点访问未初始化的指针!在您的示例中,列表本身和列表节点之间的区别不是很清楚。如果删除列表的最后一个元素会怎么样?然后应该更新FirstNodePt和lastNodePtr。因为您没有向我们展示main()程序来告诉我们如何操作列表,所以这里有一个想法:创建一个包含两个条目的列表,并尝试通过两个连续调用删除(0)处的_来删除这两个条目。换句话说,删除头部节点两次。哦,对了,每次删除firstNodePtr时都忘了更新它。
private:
struct node {
T val;
node* prevNodePtr;
node* nextNodePtr;
};
node* firstNodePtr;
node* lastNodePtr;
unsigned size;