Может кто-нибудь сказать мне, почему я получаю ошибку "HEAP CORRUPTION DETECTED"? - PullRequest
1 голос
/ 12 апреля 2019

У меня проблема с домашней работой, из-за которой я должен создать шаблон класса Stack. Остальная часть моего кода была протестирована и работает должным образом, но моя резервная функция в результате выдает ошибку «HEAP CORRUPTION DETECTED». В частности, это выглядит следующим образом: «ОБНАРУЖЕНА КОРРУПЦИЯ КАРТЫ: после блока Normal (# 186) в 0x01200A20. 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...