Так что я пытаюсь создать класс шаблона для кучи. Я стараюсь не использовать какие-либо классы STL (правила профессора и многое другое), поэтому вместо использования вектора я использую динамически выделенный массив. Однако, когда я запускаю программу и вводят достаточно данных в кучу, чтобы она вызывала функцию изменения размера, она вызывает кучу ошибок памяти. Некоторые работы gdb сузились до этой функции:Ошибки памяти в размере массива
template <class T>
T* Heap<T>::resize()
{
T* temp; //temp variable for storage
heap_capacity *= 2; //double capacity
temp = new T[heap_capacity]; //create new enlarged array
for (int i = 0; i < heap_size; ++i)
{
temp[i] = heap_arr[i]; //copy elements from previous array to current
}
delete [] heap_arr; //delete old array
return temp; //return new array
}
Pretty standard stuff, tbh. Он требует, чтобы у T был оператор присваивания, но я тестировал его с использованием простых старых целых чисел. Это не первый раз, когда я написал этот код, но это первый раз, когда я написал его для шаблона. Проблема в этой функции, или это где-то еще?
Редактировать: Я играл с кодом немного больше в gdb. Выключает ошибки программы сразу после выделения памяти для темпа. Это странно, потому что я делаю то же самое для оригинального heap_array в конструкторе. Я буду ковать немного больше, но мой синтаксис неверен для «нового» утверждения? heap_capacity действительно, btw, так что это не проблема ...
Возможно, heap_size больше, чем heap_capacity. –
Каковы конкретные ошибки, которые вы получаете? – Barmar
Я рекомендую вам сначала написать свой (минимальный) клон 'std :: vector', отладить его со многими тестовыми примерами, а затем написать класс кучи поверх него. Это связано с тем, что ваша ошибка больше связана с «дизайном программы», чем с классом «алгоритм и структура данных», который вы посещаете. Вы должны были поймать ошибку в вашем методе 'resize()' (без параметра 'size'!), Если бы вы следовали этому подходу. – nodakai