У меня проблема с домашней работой, из-за которой я должен создать шаблон класса 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.