#c #arrays #pointers #min-heap
#c #массивы #указатели #минимальная куча
Вопрос:
Я работал над созданием класса минимальной кучи (для практики), и он полностью работает, однако мне кажется, что моя функция увеличения емкости для массива указателей, который содержит массив кучи, вероятно, вызывает утечку памяти. (извините за мое ужасное кодирование). Ниже я показываю свою функцию, конструктор и инициализацию частного члена, однако на самом деле это не так структурировано в коде, просто так для удобства написания сообщения.
int* heap; // init as a private member
MinHeap() {
this->total_capacity = 10; // init in default constructor
heap = new int[total_capacity];
}
// if total capacity is reached:
// creates a larger array and copies all elements over to it
void ensureExtraCapacity() {
if (length == total_capacity) {
total_capacity *= 2;
int* temp = new int[total_capacity];
for (int i = 0; i < length; i )
temp[i] = heap[i];
heap = temp;
delete[] temp; // <= this is causing me issues
cout << "Capacity added." << endl;
}
}
- Length — это значение int, которое отслеживает, сколько чисел находится в куче
Я попытался удалить его, однако это закончилось либо удалением новых чисел из нового массива, либо добавлением двух нулей, в любом случае, это нехорошо.
с помощью «delete[] temp»
без «delete[] temp»
2 вещи:
- Я знаю, что могу использовать вектор, меняющий жизнь, но я хотел использовать массивы указателей для практики.
- Если есть лучший способ добиться этого (например, с помощью какой-либо функции STL, такой как copy или std: array, дайте мне знать, однако я все равно хотел бы получить ответ на это)
P.S: Извините, если это дубликат, я огляделся, клянусь.
P.S: Если вы знаете какие-либо ресурсы для улучшения работы с памятью и указателями (или даже библиотеку STL), пожалуйста, также свяжите их, спасибо!