我正在尝试在C 中实现动态堆栈。我在课堂堆里有3个成员1.CAP是容量。2.标准点到堆栈顶部3.到达整数。
在类约束中,我将存储器分配给堆栈(malloc)。稍后,在Meminc()我试图实现内存。
我已经写了一个函数meminc()来实现内存,但我遇到了这个无效的旧尺寸错误。
,如果您让我知道此代码中有什么问题,这将是有帮助的。我也将感谢任何给我的建议。谢谢。
#include <iostream>
using namespace std;
#define MAXSIZE 5
class stack {
int cap;
int top;
int *arr;
public:
stack();
bool push(int x);
bool full();
bool pop();
bool empty();
bool meminc();
};
stack::stack()
{
cap = MAXSIZE;
arr = (int *)malloc(sizeof(int)*MAXSIZE);
top = -1;
}
bool stack::meminc()
{
cap = 2 * cap;
cout << cap << endl;
this->arr = (int *)realloc(arr, sizeof(int)*cap);
return(arr ? true : false);
}
bool stack::push(int x)
{
if (full())
{
bool x = meminc();
if (x)
cout << "Memory increased" << endl;
else
return false;
}
arr[top++] = x;
return true;
}
bool stack::full()
{
return(top == MAXSIZE - 1 ? true : false);
}
bool stack::pop()
{
if (empty())
return false;
else
{
top--;
return true;
}
}
bool stack::empty()
{
return(top == -1 ? true : false);
}
int main()
{
stack s;
char y = 'y';
int choice, x;
bool check;
while (y == 'y' || y == 'Y')
{
cout << " 1.pushn 2.popn" << endl;
cin >> choice;
switch (choice)
{
case 1: cout << "Enter data?" << endl;
cin >> x;
check = s.push(x);
cout << (check ? " push completen" : " push failedn");
break;
case 2: check = s.pop();
cout << (check ? " pop completen" : " pop failedn");
break;
default: cout << "ERROR";
}
}
}
要添加约翰的答案,
您使用realloc()
的方式是...
bool stack::meminc() { cap = 2 * cap; cout << cap << endl; this->arr = (int *)realloc(arr, sizeof(int)*cap); return(arr ? true : false); }
如果realloc()
失败,它将返回nullptr
,并且将唯一的指针(arr
)返回到原始内存区域。另外,代替return(arr ? true : false);
,您应该简单地使用return arr != nullptr;
。
右 tm 使用realloc()
:
bool stack::meminc()
{
int *temp = (int*) realloc(arr, sizeof(*temp) * cap * 2);
if(!temp)
return false;
cap *= 2;
arr = temp;
return true;
}
另外,您的复印件,作业运算符和D-tor?
full
函数不正确。应该是
bool stack::full()
{
return(top == cap - 1 ? true : false);
}
或更简单的添加const
bool stack::full() const
{
return top == cap - 1;
}
您也错误地使用了top
变量。由于顶部从-1
开始,您应该在设置值之前增加top
,而不是之后
arr[++top] = x;
不是一个错误,而是从设计中的 meminc
是私人功能。