我使用Visual Studio在C中编写了一个程序。我的程序在调试中正确运行但是当我切换到释放模式时,我通过使用一个Matrix运行程序来面对访问冲突错误 我的程序结构如下:
int main()
{
//some declaration and memory allocation
while(true)
{
//include algorithm with memory allocation
....
//releasing the allocated memories
// point I
//Point II
}}
如你所见有两点,有一个矩阵(double ** RX
),无论我是否释放其内存都没有区别。我的意思是,当我的程序在while循环中运行多次时,无论是否释放此内存,都没有泄漏内存。但另一方面,我有另一个矩阵(double ** bit_error_rate
),我用它来查找程序中的结果。在发布模式下,当我尝试访问此矩阵时出现面错:
fout = fopen("results.txt","w+");
for(i = 0 ; i < EbN0dB_Len ; i++)
{
for(i1 = 0; i1 < iteration; i1++)
fprintf(fout,"%lf\t",bit_error_rate[i][i1]);
fprintf(fout,"\n");
}
fprintf(fout,"\n");
在此部分之前我只使用此矩阵一次:
for(i = 0 ; i < iteration ; i++)
{
tot_error_matrice[t][i] = tot_error_vecteur[i];
bit_error_rate[t][i] = tot_error_vecteur[i]/total_bits;
}
我检查过常见的内容,例如:初始化变量和指针,带外访问,悬空指针(所有指针都是NULL或具有有效值)。但现在我没有结果。
:
当我评论所有代码如fprintf(fout,"%lf\t",bit_error_rate[i][i1]);
时,程序运行正常,但我无法查看输出。
编辑2:
我发现问题必须是最后一个代码段,当t
等于4时发生异常。
编辑3:
我对自己的项目感到困惑:
1.有内存泄漏,这不是(第1点)
2.没有任何理由的运行时错误
3.我有4个与此部分相关的声明:
double * new_error_vecteur = (double*)malloc((iteration)*sizeof(double));
double * tot_error_vecteur = (double*)malloc((iteration)*sizeof(double));
double ** tot_error_matrice = (double**)malloc(EbN0dB_Len*sizeof(double*));
double ** bit_error_rate = (double**)malloc(EbN0dB_Len*sizeof(double*));
我刚刚改变了位置,每一个都解决了!