realloc():即使使用malloc()分配内存,旧大小也无效

时间:2019-02-27 07:13:48

标签: c++ memory dynamic malloc realloc

我正在尝试在c ++中实现动态堆栈。 我在课堂上有3名成员 1.cap是容量。 2.top-指向栈顶 3. arr-指向整数的指针。

在类构造函数中,我正在将内存分配给stack(malloc)。 稍后在meminc()中,我试图重新分配内存。

我写了一个函数meminc()重新分配内存,但是我收到了这个无效的旧大小错误。

如果您让我知道此代码中的错误,将很有帮助。我也将感激给我的任何建议。 谢谢。

0..23

2 个答案:

答案 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应该是私有函数。