free()错误:无效的下一个大小(fast)

error with free(): invalid next size (fast)

本文关键字:fast 下一个 无效 错误 free      更新时间:2023-10-16

我正在进行一个涉及插值的项目,我已经将插值函数实现为类,当我尝试运行分段插值算法时,我收到以下错误消息:带有内存地址的free(): invalid next size(fast)

我的主要功能的相关部分是:

double * xx = new double [n];
xx[0] = a;
xx[n - 1] = b;
for (int i=1; i<n - 1; i++) xx[i] = (rand() % 1000) * (b - a) / 1000 + a;
PwLin pv1 (n, a, b, 1, xx, 1);
PwLin pv2 (n, a, b, 2, xx, 1);
PwLin pv3 (n, a, b, 3, xx, 1);

cin >> x;
cout << pv1.eval(x) << 't' << abs(f1(x, 1) - pv1.eval(x)) << endl;
cout << pv2.eval(x) << 't' << abs(f2(x, 1) - pv2.eval(x)) << endl;
cout << pv3.eval(x) << 't' << abs(f3(x, 1) - pv3.eval(x)) << endl;

PwLin类是

class PwLin
{
double * xl, * yl, * h;
double a, b;
int n;
bool uni;
public:
double eval(double);
PwLin(int, double, double, int, double);
PwLin(int, double, double, int, double *, double);
~PwLin(){};
};

eval()函数是

double PwLin::eval(double x)
{
int i=0;
while (x > xl[i]) i++;
if (uni == 1){
return (yl[i - 1] * (xl[i] - x) + yl[i] * (x - xl[i - 1])) / h[0]; }
else return (yl[i - 1] * (xl[i] - x) + yl[i] * (x - xl[i])) / h[i];
}

我搜索了一下,发现free(): invalid next size错误是由内存泄漏引起的,但我不知道它在哪里。当我运行函数时,直到我输入一个x值进行测试,才会出现错误,所以这似乎是eval()函数而不是构造函数的问题,但我在eval()或while循环中根本没有任何内存操作,我不知道问题出在哪里。

嗯,我上周安装了ubuntu,不知道如何使用它,我使用的是gedit,afaik没有调试实用程序,如果ubuntu中有什么更花哨的东西,我不知道它是什么

这可能无法解决任何问题,但。。。

这些行很容易导致越界访问。

int i=0;
while (x > xl[i]) i++;

您应该将它们替换为:

int i = 0;
for ( ; i < n; ++i )
{
   if ( x >= xl[i] )
   {
      break;
   }
}

当你完成了xl中的所有项目时,处理这个案例。

if ( i == n )
{
   // can't interpolate. Do something about it.
}