有人可以告诉我为什么我得到“堆损坏检测”错误吗?

时间:2019-04-12 02:07:02

标签: c++11

我有一个作业问题,要求我制作一个模板Stack类。我的其余代码已经过测试,可以正常工作,但是我的保留功能最终给了我“检测到堆损坏”的错误。更具体地说,它看起来像是“检测到堆损坏:在0x01200A20的正常块(#186)之后。CRT检测到应用程序在堆缓冲区结束后写入了内存。”

我查看了所有其他可以找到此问题的地方,但没有一个能解决我的问题。

template<typename T>
void Stack<T>::reserve(int newCap) 
{

    if (newCap < s || newCap == cap) 
    {
        return;
    }

    T* temp;

    cap = newCap;

    if (cap == 0)
    {
        return;
    }
    else
    {
        temp = new T(newCap);
    }

    for (size_t i = 0; i < s-1; i++)
    {
        temp[i] = data[i];
    }//When I debugged my program, this block was where the error occurred

    delete[] data;
    data = temp;

}
void Stack<T>::push(const T& val) 
{

    if (s == cap)
    {
        if (cap == 0)
        {
            reserve(1);
        }
        else
        {
            reserve((cap * 2));
        }
    }

    data[s] = val;
    s++;

}

此函数应该做的就是将cap分配给newCap,并且基本上它将数据指向具有更新的存储大小的T型新数组。这样我就可以将更多的值推入堆栈。当我运行程序时,它能够将7个值压入堆栈,但是在接下来的6次push调用中失败。

0 个答案:

没有答案