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

标签 c pointers segmentation-fault

当我在我的程序中添加这个函数时,我得到这个错误:“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. 为清楚起见,输入参数应为 const 指针。
  2. 不会检查 malloc() 的返回值,因此如果分配失败,您就完蛋了。
  3. Don't cast the return value of malloc() in C .
  4. 不要使用循环复制,使用 memcpy()
  5. 不能保证 j 不会越界。
  6. 从未使用过ret 数组。

关于c - c 中的段错误 - 可能与指针有关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407321/

相关文章:

c++ - 多线程 - 彼得森的算法不起作用

c - 为什么 ftell 会跳过文件中的某些位置?

c - strtok() 嵌套时只分词一次

c - 试图理解这个段错误

c - 在 c 中重新分配 char** 数组(Seg fault core dumped)

c - 使用 strcat() 的段错误

C - union 输出到屏幕和文本文件

c - c中的格式说明符

c - C语言中如何通过指针传递二维数组?

objective-c - 修改传递给方法的函数指针?