У меня есть программа, которая работает в MPI. Хотя реальная проблема - это только часть программы, где процессор 0 считывает из txt-файла некоторые числа в динамический массив. Чтобы определить, что я сканирую до конца файла, я использую указатель файла и делю результат на 4 (это число байтов, в котором нуждается каждый int) и должен иметь правильный размер для выделения памяти. Проблема в том, что он работает не так, как задумано, и в итоге получает половину размера, поэтому я прочитаю половину файла, и программа не будет корректной.
Я попытался поочередно отформатировать числа в файле, предполагая, что это проблема такого рода, но ничего.
Мои данные.txt:
1 2 3 4 5 6 7 8 9 10 11 12
Раздел кода, который читает из файла:
fp = fopen("Data.txt", "r");
if (fp == NULL) {
fprintf(stderr, "Error while opening file.\n");
MPI_Abort(newComm, 2);
}
fseek(fp, 0, SEEK_END);
n = ftell(fp);
n /= sizeof(int);
printf("n = %d\n", n);
fseek(fp, 0, SEEK_SET);
workLoad = n / p;
if (n % p != 0) {
fprintf(stderr, "The number of elements in the file MOD the number of proccessors must equal zero.\n");
MPI_Abort(newComm, 2);
}
arr = (int*)malloc(n * sizeof(int));
if (arr == NULL) {
fprintf(stderr, "Error in malloc!\n");
MPI_Abort(newComm, 1);
}
for (i = 0; i < n; i++)
fscanf(fp, "%d", arr + i);
fclose(fp);
printf("Numbers loaded from file.\n");
break;
Ожидаемый результат должен быть массивом с 12 элементами, такими как номера файла.
Фактический вывод - это массив из 6 элементов до числа 6, что составляет половину фактического размера.