我正在尝试在c ++中实现动态堆栈。 我在课堂上有3名成员 1.cap是容量。 2.top-指向栈顶 3. arr-指向整数的指针。
在类构造函数中,我正在将内存分配给stack(malloc)。 稍后在meminc()中,我试图重新分配内存。
我写了一个函数meminc()重新分配内存,但是我收到了这个无效的旧大小错误。
如果您让我知道此代码中的错误,将很有帮助。我也将感激给我的任何建议。 谢谢。
0..23
答案 0 :(得分:1)
要添加到约翰的答案中,
您使用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在哪里?
答案 1 :(得分:0)
full
函数不正确。应该是
bool stack::full()
{
return(top == cap - 1 ? true : false);
}
或更简单地添加const
bool stack::full() const
{
return top == cap - 1;
}
您还错误地使用了top
变量。由于top从-1
开始,因此您应该在设置值之前增加top
,而不是在之后
arr[++top] = x;
这不是错误,但从设计的角度来看,meminc
应该是私有函数。