C:由于在其他地方没有释放内存而导致的分段错误。如何释放记忆

时间:2014-12-04 19:49:16

标签: c

我有一个功能如下:

double **E_min;
int *D_K;
double *prob;
char checker[] = "yes";
while(!strcmp(checker,"yes")){
.
.
.
    E[I_indice][t] = ProcurementCost(Q[t+1][I_indice], c, k) + h*fmax(0,I[t])
      + p*fmin(0,I[t])
      + CalculateSigma(d_max, I_indice+Qt_DP, E_min, D_K, prob, t+1, Num_DK);
.
.
.
free(E_min)
free(D_K)
free(prob)
 printf("Do you want to check another forecast? (yes/no)\n");
 scanf("%s", &checker[0]);
} // this is for while loop

我在 CalculateSigma 功能中遇到了分段错误。

这是我的计算西格玛函数:

double CalculateSigma( int D_max, int insideSum, double **Emin,
int *D_K, double *probability, int insideTIME, int num_DK)
  {
    int counter;
    double Sigma = 0;
    for (counter = 0; counter < num_DK; counter++ )
    {   
      Sigma += probability[counter]* Emin[insideSum- D_K[counter]][insideTIME];
    }
    return Sigma;
  }

所以这就是问题所在。 当我第一次运行这个程序时,它完全没有任何问题。但当它询问如果我想给另一个数字时,它会在进入 CalculateSigma 函数后给我一个分段错误。我认为原因是我在函数中有三个指针: Emin,D_K,Probability 与主循环中的指针不同。所以我必须释放它们。但如果我释放它们,我会从一开始就遇到一个段错误,因为它们也有某种相关性。

所以我在这里完全糊涂了。谁能告诉我该怎么办? 感谢

1 个答案:

答案 0 :(得分:0)

代码存在其他问题和/或不完整。但是,首先要做的事情。

你为什么这么做?

free(E_min)
free(D_K)
free(prob)

如果您打算在下一个循环迭代中重用这些变量。另外,我看不到他们第一次被分配到哪里。在继续进行之前,这些是需要解决的基本问题。