`./2':free()出错:无效指针:0x000000000096044c ***已中止(核心转储)

时间:2016-02-18 02:43:00

标签: c++ arrays pointers dynamic

我是c ++的新手,当我删除指向整数数组的指针时,我的程序出现了这个错误。这是我代码的一部分。

int *list=new int[20]; 

ifstream in;
in.open(xxx);
for(a = 0; a < 10; a++){
in >> *list
list++;}

delete[] list;

list = NULL;

3 个答案:

答案 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之前,您的代码会继续执行并执行一些操作,其中还包括递增指针。