Почему FREAD выдает ошибку в Linux, а не в Windows? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть код, который неожиданно начал вести себя странно.Он работал нормально, как и 3 месяца назад, я оставил его для работы над другими проектами и на этой неделе вернулся к нему.К моему удивлению, когда я запустил код, результаты были странными.

Код должен считывать бин-файл, имитирующий модель скорости подземного земного шара, снимать акустический импульс, который распространяется через него, а затем записывать генерируемую сейсмограмму плюс фронтальные волны.Каждые 400 итераций все сохраняются в виде бинарных файлов, которые я могу открыть с помощью другого приложения.

Когда я запустил код на этой неделе, сгенерированные файлы изображений больше не были горизонтальными, они были наклонены как 45 градусов.У меня было подозрение, что это что-то связано с каким-то обновлением в Windows 7 или CodeBlocks.Поэтому я решил использовать Linux.Я установил Oracle Linux на свой ноутбук, старый двухъядерный процессор Pentium с 8 ГБ ОЗУ, что сделало его двойной загрузкой.Установил 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);

Скоростная модель - это файл bin размером 400x300.

Я уже использую #include string.h

...