Увеличение размера массива указателей — C

#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), пожалуйста, также свяжите их, спасибо!