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



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

函数数组Cpy:

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;
}

假设初始化索引= 15,您正在复制14个元素,而状态大小仅为10

delete[] tempArr; // HEAP CORRUPTION DETECTED
states = tempArr;

删除数组,然后使用它。

正如人们在评论中所说,使用 std::vector,无需进行新建/删除。

最新更新