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

标签 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 与主循环中的指针不同。所以我必须释放他们。但如果我释放它们,我从一开始就会遇到段错误,因为它们也以某种方式相关。

所以我在这里完全困惑了。有人可以告诉我我该怎么办吗? 谢谢

最佳答案

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

你为什么有?

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

如果您打算在下一个循环迭代中重用变量。另外,我不知道它们最初分配在哪里。这些是在继续下一步之前需要解决的基本问题。

关于C:由于没有在其他地方释放内存而导致段错误。如何释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302762/

相关文章:

从 const char* 转换为 Swift 字符串

c - 这是一个简单的电话簿

创建运行批处理命令并将其传递给第二个 C 程序的 C 程序

C 递归反转一个数

c - 如何使用C以二进制模式读取UTF-8文件并将其转换为UTF-16文件

c - union 内部的 2 个结构,来自头文件

c - 将大 float 存储为整数(强制转换和不强制转换)

c - "The C Programming Book"中的函数 getop() 是如何工作的?

c - int 和 signed int 声明之间的区别

c++ - std::memcpy与std::copy_n用于旧版C结构