Обнаружено повреждение кучи в 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.

Другие вопросы по тегам