c中的分段错误 - 可能与指针有关

时间:2014-01-28 13:47:29

标签: c pointers 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);

1 个答案:

答案 0 :(得分:6)

代码相当不安全。一些问题,不仅是关于安全性,而且其中一些肯定会导致你的崩溃:

  1. 为清晰起见,输入参数应为const个指针。
  2. 未检查malloc()的返回值,因此如果分配失败,则为吐司。
  3. Don't cast the return value of malloc() in C
  4. 请勿使用循环进行复制,请使用memcpy()
  5. 无法保证j不会超出范围。
  6. 永远不会使用ret数组。