【问题标题】:Error in `./2': free(): invalid pointer: 0x000000000096044c *** Aborted (core dumped)`./2' 中的错误:free():无效指针:0x000000000096044c *** 中止(核心转储)
【发布时间】:2016-02-18 02:43:00
【问题描述】:
我是 C++ 新手,当我删除指向整数数组的指针时,我的程序出现了这个错误。这是我的代码的一部分。
int *list=new int[20];
ifstream in;
in.open(xxx);
for(a = 0; a < 10; a++){
in >> *list
list++;}
delete[] list;
list = NULL;
【问题讨论】:
标签:
c++
arrays
pointers
dynamic
【解决方案1】:
list++delete list;?
您需要返回并再次查看指针等。通过执行list++,您正在更改list 的值,所以当您说delete [] list 时,该值不是您分配的值。
【解决方案2】:
传递给delete 的指针必须与new 返回的指针完全相同。
您的代码获取new 返回的值,并将其放入指针中。
之后,您的代码继续执行一些操作,其中还包括在调用 delete 之前增加指针。
【解决方案3】:
您正在 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;