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