为什么FREAD在Linux而不是Windows上给出错误?

时间:2018-10-14 15:03:17

标签: c linux fread sigsegv

我有一个突然出现奇怪行为的代码。像3个月前一样,它运行良好,我把它放在一边而不是其他项目上,而本周我又回到了它。令我惊讶的是,当我运行代码时,结果很奇怪。

该代码应读取一个模拟地下地球速度模型的bin文件,拍摄一个在其中传播的声脉冲,然后记录生成的地震图以及前波。每400次迭代都保存为bin文件,可以使用另一个应用程序打开。

当我本周运行代码时,生成的图像文件不再水平,而是倾斜了45度。我怀疑这与Windows 7或CodeBlocks中的某些更新有关。因此,我决定使用Linux。我在笔记本电脑上安装了Oracle Linux,这是一个具有8Gb RAM的旧双核Pentium,使其成为双引导。安装了Netbeans 8,得到了代码,做了一些小的修改并运行了它。令我惊讶的是,它在第​​一个fread命令上给出了分段错误,这在Windows上是没有发生的。

为什么会有这种不同的行为?是否可能与IDE或环境相关?

代码部分出现问题:

    vel = (double **) malloc (Nz * sizeof(double *));
      for (i = 0; i < Nz; i++)
    vel[i] = (double *) malloc (Nx * sizeof(double));
    modelo = (char *) malloc (256 * sizeof(char));
    modelo == "vp_model_400x300.bin";
    //reading velocity grid
    printf("\nSaving velocity model...\n");
    vel_arq = fopen(modelo, "rb");
    for (j = 0; j < Nx; j++)
    for (i = 0; i < Nz; i++)
    {
      fread (&v, sizeof(float), 1, vel_arq);
      vel[i][j] = (double) v;
    }
    fclose(vel_arq);

速度模型是一个400x300 bin文件。

我已经在使用#include string.h

0 个答案:

没有答案