gpt4 book ai didi

c++ - 堆叠 C++ 代码工作正常,但在运行代码结束时得到 "glibc detected"

转载 作者:行者123 更新时间:2023-11-28 00:34:59 25 4
gpt4 key购买 nike

我目前正在我的数据库类中使用“堆栈”,并且遇到“* 检测到 glibc *”的问题。据我了解,这是访问不存在的内存或从其他来源泄漏的内存的问题。翻了好几遍也看不出哪里有内存泄露之类的。

我们的任务是创建一个动态堆叠程序。

我的代码由三个文件组成,但我会将它们全部编译成一个 cpp:

//#include <dstack.h>
#include <iostream>
#include <stdexcept>

using namespace std;

class DStack
{
private:
int *p;
int *t;
int length;

public:
DStack();
~DStack();

void push(int);
int pop();
void display();
};

DStack::DStack()
{
length=0;
cout<<"Stack has been created!"<<endl;
p=new int[length];
}

DStack::~DStack()
{
delete [] p;
}

void DStack::push(int elem)
{
t = new int[length+1];
for ( int i = 0; i < length; i++ )
{
t[i] = p[i];
}
p = t;
p[length] = elem;
delete [] t;
length++;
cout<<length;

}
int DStack::pop()
{
t = new int[length-1];
int ret = p[length-1];
for ( int i = 0; i < length-1; i++ )
{
t[i] = p[i];
}
p = t;
delete [] t;
length--;
return ret;
}

void DStack::display()
{
cout<<length<<": ";
for(int i = 0; i < length; i++)
cout<<p[i]<<" ";
cout<<endl;
}

//main.cpp
//#include <dstack.h>

int main()
{
cout<<"Enter a size for stack : ";
DStack s1;

s1.push(1);
s1.display();
s1.push(2);
s1.push(3);
s1.push(4);
s1.push(5);
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();


}

如有任何帮助或指导,我们将不胜感激!代码似乎也能正常工作,只是那个错误...

最佳答案

push代码

p = t;
p[length] = elem;
delete [] t;

删除新数组并泄漏旧数组。你需要做的

delete [] p;
p = t;
p[length] = elem;

相反。

pop 中存在类似的错误.您可能会发现不在此处重新分配并只使用较少的数组会更容易。如果这样做,您还需要存储一个 size成员(member)及变更push仅在 size == length 时重新分配

关于c++ - 堆叠 C++ 代码工作正常,但在运行代码结束时得到 "glibc detected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com