Обнаружено повреждение кучи в C++ в массиве delete[] после его копирования
Я пытаюсь создать метод, который создает своего рода динамический массив: когда индекс превышает, он создает другой массив с еще одним элементом, а затем удаляет старый, копируя указатель нового в старый. Но когда я удаляю старый массив, у меня обнаруживается КОРРУПЦИЯ КАРТЫ, и программа зависает. states
старый массив (с 10 элементами) initializationIndex
используется для отслеживания длины массива.
if (states == nullptr)
states = new int[10];
if (initializationIndex > 10) {
int *tempArr = new int[initializationIndex];
arrayCpy(states, tempArr, initializationIndex - 1);
delete[] states; // HEAP CORRUPTION DETECTED
states = tempArr;
}
if (arrayContains(initializationIndex, states, stateToInsert))
return false;
states[initializationIndex] = stateToInsert;
initializationIndex++;
Функция arrayCpy:
void arrayCpy(int * src, int * dst, int offset)
{
int i = 0;
for (i = 0; i < offset; i++) {
dst[i] = src[i];
}
}
1 ответ
Решение
Вы редактировали вопрос.
if (states == nullptr)
states = new int[10];
if (initializationIndex > 10) {
int *tempArr = new int[initializationIndex];
arrayCpy(states, tempArr, initializationIndex - 1);
delete[] states; // HEAP CORRUPTION DETECTED
states = tempArr;
}
давайте предположим, что initializationIndex = 15, вы делаете копию для 14 элементов, в то время как размер состояний составляет всего 10
delete[] tempArr; // HEAP CORRUPTION DETECTED
states = tempArr;
Вы удаляете массив и затем используете его.
как говорили люди в комментариях, используйте std::vector, нет необходимости делать new/delete.