C++ 错误:free():无效指针
C++ Error in ' ' : free(): invalid pointer
我已经阅读了类似的问题,但我找不到任何具体解决我的问题(或者我只是不理解其他解决方案)
我试图实现一个模板堆栈类,当试图推到堆栈时,我有一个问题。这是我的Stack.cpp:
#ifndef _STACK_H
#define _STACK_H
#include <string>
#include <stdio.h>
#include "Node.cpp"
template<typename T>
class Stack{
private:
Node<T>* mHead;
public:
Stack();
~Stack();
void push(T data);
};
template<typename T>
Stack<T>::Stack(){
mHead = NULL;
}
template<typename T>
Stack<T>::~Stack(){
delete mHead;
}
template<typename T>
void Stack<T>::push(T data){ // <-- having trouble with this method
Node<T>* temp = new Node<T>;
temp->data = data;
//if head is already empty, just create 1 Node
if(mHead==NULL){
printf("if workingn");
mHead = temp;
}else{
printf("else workingn");
//rearrange Nodes
temp->next = mHead;
mHead = temp;
}
printf("successn");
}
#endif
push()从管理器类中的函数调用:
void Manager::testPush(){
Stack<int> test;
int number = 3;
test.push(3);
}
当我运行代码并调用管理器testPush()方法时,我得到以下打印:
if working
success
*** Error in `./assignment': free(): invalid pointer: 0x0000000000f11078 ***
[1] 14976 abort (core dumped) ./assignment
我不确定free()是什么意思,以及什么可能导致这个错误/abort
似乎您忘记在节点temp中设置NULL旁边的数据成员。
template<typename T>
void Stack<T>::push(T data){ // <-- having trouble with this method
Node<T>* temp = new Node<T>;
temp->data = data;
temp->next = NULL; // <=== add this statement
//if head is already empty, just create 1 Node
if(mHead==NULL){
printf("if workingn");
mHead = temp;
如果Node类有一个带两个参数的构造函数,或者它是一个聚合,你可以编写更简单的
template<typename T>
void Stack<T>::push( const T &data )
{
mHead = new Node<T> { data, mHead };
}
考虑到Node类的析构函数必须删除堆栈中的所有节点。
这个函数void Manager::testPush(){
Stack<int> test;
int number = 3;
test.push(3);
}
看起来也很可疑,因为test是函数的局部变量。栈只能在函数内部使用
相关文章:
- 如何实现容纳整数和无效指针的双向链表?
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- 应用地址清理器后,免费无效指针消失
- C++ 在具有数组成员的类上无效指针/双精度释放
- 不断得到分段错误和free()无效指针
- 使用无效指针初始化指针声明符的行为是否未定义?
- 结构作为参数的函数产生错误:free():无效指针:0x00007efd47b
- 无效指针、隔离标识符等
- c++ 无效指针从空闲列表中取消排队
- C++ munmap_chunk(): 无效指针:
- 为什么我的简单C++程序使用队列和 fstream 错误到无效指针
- 无效指针和非初始化的指针之间的差异
- 如何用无效指针初始化unique_ptr的向量
- 地址清理器在静态强制转换无效指针时报告错误
- MS4:Free(Free()无效指针0xB74E74E0 ***
- ***检测到的GLIBC *** MS2:free():无效指针:0xB7526FF4 ***
- 无效指针功能的输出
- 有人能告诉我这是如何在main()中实现的吗?(关于无效指针的问题)
- C++11使用智能指针,但得到无效指针
- 无效指针的相关性