【问题标题】: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;
        

        【讨论】:

          猜你喜欢
          • 2021-03-11
          • 2020-12-05
          • 1970-01-01
          • 2019-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-04
          • 2018-06-18
          相关资源
          最近更新 更多