"./2"中的错误:free():无效指针:0x000000000096044c *** 已中止(核心转储)
Error in `./2': free(): invalid pointer: 0x000000000096044c *** Aborted (core dumped)
我是 c++ 的新手,当我删除指向整数数组的指针时,我的程序刚刚出现了此错误。这是我代码的一部分。
int *list=new int[20];
ifstream in;
in.open(xxx);
for(a = 0; a < 10; a++){
in >> *list
list++;}
delete[] list;
list = NULL;
list++
delete list;
?
你需要回去再看看指针等。通过执行list++
,您正在更改list
的值,因此当您说delete [] list
值时,该值不是您分配的值。
传递给
delete
的指针必须与new
返回的指针完全相同。
您的代码采用 new
返回的值,并将其放入指针中。
之后,您的代码继续并执行一些操作,其中还包括在调用 delete
之前递增指针。
您正在更改 for 循环中的list
。当循环结束时,list
不指向分配的原始位置,delete[]
其上将是 UB。
可以使用 for 循环中的operator[]
来避免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;
相关文章:
- 没有找到相关文章