我有一个突然出现奇怪行为的代码。像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