所以,我已经查阅了COUNTLESS其他有关类似主题的帖子,但没有一个能够给我一个满意的答案。我正在编写一个双向链表程序,当我在驱动程序文件中创建一个Queue对象时,我收到此错误:
*检测到glibc * ./driver.out:free():指针无效:0x0000000000400773 ***
它正在做的就是调用构造函数(字面意思是Main()中唯一的代码):
Queue341<int> myQueue;
这是构造函数:
template <class T>
Queue341<T>::Queue341()
{
}
所有正确的头文件都包括,保护等。我只是不明白这个错误......我从来没有使用过免费()!!!
编辑: 这是Destructor代码: 模板
Queue341<T>::~Queue341(){
Clear();
}
这里是Clear():
template <class T>
bool Queue341<T>::Clear(){
Node341<T> *current, *next;
current = this->m_head;
while (current != NULL){
next = current->m_next;
delete current;
current = next;
}
return true;
}
答案 0 :(得分:0)
我只是不明白这个错误 它所做的只是调用构造函数(字面意思是Main()中唯一的代码):
你已经在其他地方损坏了堆。在C++
中,如果你有类类型的全局变量,那么很多代码会在main
之前(和之后)执行。
我从不使用free()
但您使用调用delete
的{{1}}。
在valgrind下运行你的程序,它会告诉你完全你的问题所在。