Случай 1 : m_ppKeyValueList
- это " динамический массив указателей на объекты в куче "
В этом случае вам нужно удалить m_ppKeyValueList по частям. Если это именно то, что вы имели в виду, ваша декларация будет иметь вид SomeType ** m_ppKeyValueList;
Ваше распределение и освобождение должно быть таким:
Распределение:
m_ppKeyValueList = new SomeType*[m_iCapacity];
for (int i = 0; i < m_iCapacity; ++i) {
m_ppKeyValueList[ii] = new SomeType;
}
Deallocation:
for (int i = 0; i < m_iCapacity; ++i) {
delete m_ppKeyValueList[ii];
}
delete[] m_ppKeyValueList;
Однако из-за того, что ваш код дает сбой, можно предположить, что у вас нет «динамического массива указателей на объекты в куче».
Случай 2 : m_ppKeyValueList
- это динамический массив объектов в куче
Здесь ваша декларация будет иметь вид SomeType * m_ppKeyValueList;
Вместо того, чтобы выделять этот фрагмент по частям, ваше выделение и освобождение принимают гораздо более простую форму:
Распределение:
m_ppKeyValueList = new SomeType[m_iCapacity];
Deallocation:
delete[] m_ppKeyValueList;
Итог :
Ваше распределение и освобождение должны соответствовать друг другу по количеству и форме. Если вы выделите что-то с помощью new
, вам нужно уничтожить это с помощью delete
. Если вы наделите его new[]
, вам нужно уничтожить его delete[]
.