Несколько вещей:
как вы открываете файл, я не уверен насчет ваших констант, но они должны читать
"wb"
, чтобы записать двоичный файл, и "rb"
дляread.
Никогда не помещайте оператор в assert, assert удаляется, когда программа компилируется в режиме выпуска.Вместо этого проверьте возвращаемое значение и подтвердите на этом
например
bool ok =fwrite(structureData, sizeof(short), CHUNK_SIZE, file)) == CHUNK_SIZE;
assert(ok);
, хотя вы не должны утверждать это, вместо этого вы должны распечатать правильное сообщение об ошибке. assert для ошибок программирования, а не ошибок времени выполнения .
short *ptx = (short *) calloc(CHUNK_SIZE * count, sizeof(short ) );
в приведенной выше строке содержится ряд проблем:
никогда не приводите возвращаемое значение calloc
в C. short *ptx = calloc...
должно быть достаточно, если вы получите предупреждение, #include <stdlib.h>
вы должны использоватьформа calloc( count, CHUNK_SIZE * sizeof( short ));
иначе выглядит немного неясно.(calloc принимает число, размер в качестве аргументов)
for (int dayIndex = 0; dayIndex < count; ++dayIndex)
xwriteStructuresToFile(file,
(void *) &ptx[ CHUNK_SIZE * sizeof(short) * dayIndex ]);
не уверен, что вы там делаете, замените два оператора на
fwrite( ptx, CHUNK_SIZE * sizeof( short ), count, fp );
, что должно записать весь массив.