free()错误:无效的下一个大小(fast)
error with free(): invalid next size (fast)
我正在进行一个涉及插值的项目,我已经将插值函数实现为类,当我尝试运行分段插值算法时,我收到以下错误消息:带有内存地址的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.
}
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- C++自定义流操纵器,用于更改流上的下一个字符串
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 下一个排列定义
- 查找下一个具有真值C++的数组索引
- 如何比较文件中包含的下一个字符
- free()错误:无效的下一个大小(fast)
- **检测到glibc***/main:free():无效的下一个大小(fast):
- 错误glibc检测到free():无效的下一个大小(fast)