发布模式下的访问冲突

时间:2014-03-16 14:46:27

标签: c debugging release declaration access-violation

我使用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*));

我刚刚改变了位置,每一个都解决了!

0 个答案:

没有答案