"./2"中的错误:free():无效指针:0x000000000096044c *** 已中止(核心转储)

Error in `./2': free(): invalid pointer: 0x000000000096044c *** Aborted (core dumped)

本文关键字:0x000000000096044c 核心 转储 指针 free 无效 错误      更新时间:2023-10-16

我是 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;
相关文章:
  • 没有找到相关文章