对于我的类函数,我得到双重释放或损坏错误
I get the double free or corruption error , for my class functions
这是我.cpp文件内容:
#include <iostream>
#include"1.h"
using namespace std;
Stack:: Stack(){
size=20;
a=new int[size];
top=-1;
}
Stack::Stack (int si){
size=si;
a=new int[si];
top =-1;}
Stack::Stack(Stack& s){
a=new int[s.size];
for(int i=0 ; i<s.size; i++)
a[i]=s.a[i];
size=s.size;
}
Stack::~Stack(){
delete [] a;
}
void Stack::Push(int data){
if(this->isfull())
cout<<"stack is full!n";
else
a[top++]=data;
}
int Stack::Pop(){
if(this->isempty())
cout<<"stack is empty!n";
else
return a[top--];
}
bool Stack::isempty(){
if(top==-1)
return true;
else
return false ;
}
bool Stack::isfull(){
if(top==size-1 )
return true ;
else
return false ;
}
void Stack::Print(){
for(int i=top ; i>-1 ; i--)
cout<<a[i]<<endl;
}
int main(){
Stack a(3);
a.Push(1);
a.Push(3);
cout<<a.Pop();
a.Push(5);
a.Push(7);
a.Print();
return 0;
}
运行程序后,我收到以下错误: "./1"中的错误:双重释放或损坏(输出(:0x000000000240a010***已中止(核心已转储(我有复制构造函数和任何东西,我做什么?
- 默认构造函数将
top
设置为 -1,因此Stack::Push(int)
a[top++]=data;
是未定义的行为(尝试写入a[-1]
,这超出了数组边界(。 这是错误消息所指的损坏,只有在调用delete [] a
时,标准库才会注意到它。 将其更改为a[++top] = data;
。 - 您的复制构造函数不会分配给
top
,使其值在副本中未初始化。 因此,从副本读取top
是未定义的行为。 - 您的复制构造函数应
Stack(Stack const &)
. - 您应该实现复制赋值运算符
Stack & operator=(Stack const &);
。
当您
在-1
初始化top
时,应该a[++top]
a[top++]
,否则您将有越界访问权限,因此 UB。
相关文章:
- 释放错误后堆使用
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 使用全局声明的向量时,C++双重释放错误/损坏
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 错误:"释放后使用包装器对象 (WRAPPER_ESCAPE)"
- 释放动态内存时C++错误
- 双重释放或损坏(输出)和中止(核心转储)错误
- AddressSanitizer 将 std::vector<T>::p ush_back 标识为释放后堆使用错误的原因
- 如何修复对象在释放后可能修改的malloc错误
- 错误:释放指针未分配在矢量模板类C 中
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 双重释放或损坏错误(找不到错误?
- 删除指针时,未分配被释放的 C++ 指针错误
- 对于我的类函数,我得到双重释放或损坏错误
- C++复制构造函数上的双重释放错误
- 如何在我的 c++ 代码中获取运行时的双重释放错误
- 在先前关闭的文件句柄上的 fclose() 上出现双重释放错误
- std::string试图释放错误的内存
- 内存分配/释放错误(非常小的代码)
- 在解构器中删除指针后执行时出现双重释放错误