我是c ++的新手,当我删除指向整数数组的指针时,我的程序出现了这个错误。这是我代码的一部分。
int *list=new int[20];
ifstream in;
in.open(xxx);
for(a = 0; a < 10; a++){
in >> *list
list++;}
delete[] list;
list = NULL;
答案 0 :(得分:1)
您正在更改for循环中的list
。当循环结束时,list
未指向分配的原始位置,delete[]
上的operator[]
将为UB。
您可以在for循环中使用list
来避免更改for(a = 0; a < 10; a++) {
in >> list[a];
}
delete[] list;
,例如
int* p = list;
for(a = 0; a < 10; a++) {
in >> *p;
p++;
}
delete[] list;
或使用局部变量
for( )
答案 1 :(得分:1)
list++
delete list;
?
你需要回过头再看看指针等。通过执行list++
,您正在更改list
的值,因此当您说delete [] list
时,该值不是您分配的值。
答案 2 :(得分:1)
传递给delete
的指针必须与new
返回的指针完全相同。
您的代码获取new
返回的值,并将其放入指针。
之后,在调用delete
之前,您的代码会继续执行并执行一些操作,其中还包括递增指针。