我有一个功能如下:
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 与主循环中的指针不同。所以我必须释放他们。但如果我释放它们,我从一开始就会遇到段错误,因为它们也以某种方式相关。
所以我在这里完全困惑了。有人可以告诉我我该怎么办吗? 谢谢
最佳答案
代码还存在其他问题和/或不完整。但是,首先要做的事情。
你为什么有?
free(E_min)
free(D_K)
free(prob)
如果您打算在下一个循环迭代中重用变量。另外,我不知道它们最初分配在哪里。这些是在继续下一步之前需要解决的基本问题。
关于C:由于没有在其他地方释放内存而导致段错误。如何释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302762/