我有一个功能如下:
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 与主循环中的指针不同。所以我必须释放它们。但如果我释放它们,我会从一开始就遇到一个段错误,因为它们也有某种相关性。
所以我在这里完全糊涂了。谁能告诉我该怎么办? 感谢
答案 0 :(得分:0)
代码存在其他问题和/或不完整。但是,首先要做的事情。
你为什么这么做?
free(E_min)
free(D_K)
free(prob)
如果您打算在下一个循环迭代中重用这些变量。另外,我看不到他们第一次被分配到哪里。在继续进行之前,这些是需要解决的基本问题。