【发布时间】:2014-01-28 13:47:29
【问题描述】:
当我在我的程序中添加这个函数时,我得到这个错误:“分段错误”。我发现它可能与指针有关。
这是我的功能:
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);
【问题讨论】:
-
我几乎不敢问,但是:你调试了吗?
-
启动 gdb 或其他一些调试器,看看故障在哪里。如果您仍然卡住,也可以创建一个minimal example。
-
是的,我做到了。没有显示错误,当我执行它时,我的部分代码只打印结果,并且在该函数的部分写入“分段错误”
-
然后阅读如何调试,例如在代码的各个点设置断点,查看分段错误发生的位置(在什么指令处)
-
您根本不检查您的输入。你怎么知道 R[1] 或 R[2] 是有效的?请注意,参数 n 的值很关键,其他参数必须已正确分配,以便对它们的访问有效。我只能相信所有这些都已经在调用者代码中完成了。我不相信。
标签: c pointers segmentation-fault