复制后在 delete[] 数组上在 C++ 中检测到堆损坏

Heap corruption detected in C++ on delete[] array after copying it

我正在尝试创建一种创建一种动态数组的方法:当索引超过时,它会创建另一个包含一个元素的数组,然后删除旧的数组,复制新数组的指针旧的。但是当我删除旧数组时,我检测到堆损坏并且程序冻结。 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];
    }
}

您编辑了问题。

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。