当我在我的程序中添加这个函数时,我得到这个错误:“Segmentation fault”。我发现它可能与指针有关。
这是我的功能:
void deBoor(double* D, double* t, double x, int k, int n, double* R){
int i,j,l;
double ret[3];
double* P=(double*)malloc(n*sizeof(double));
for(i=0; i<n; ++i) P[i]=D[i];
j=k;
while(x<t[j]) ++j;
while(x>=t[j+1]) ++j;
for(l=1; l<=k; ++l){
for(i=j; i>=j-k+l; --i)
{
P[i]=(x-t[i])/(t[i+k+1-l]-t[i])*P[i]+(t[i+k+1-l]-x)/(t[i+k+1-l]-t[i])*P[i-1];
}
}
R[0]=P[j];
free(P);
}
这是函数的调用:
deBoor (kontrolne_tocke, prosirena_particija, xx, k, duljina, R);
最佳答案
代码相当不安全。有些问题,不仅与安全有关,而且其中一些肯定会导致您的崩溃:
- 为清楚起见,输入参数应为
const
指针。 - 不会检查
malloc()
的返回值,因此如果分配失败,您就完蛋了。 - Don't cast the return value of
malloc()
in C . - 不要使用循环复制,使用
memcpy()
。 - 不能保证
j
不会越界。 - 从未使用过
ret
数组。
关于c - c 中的段错误 - 可能与指针有关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407321/