вот мой код... У меня есть функция...
void openPageFile(filehandle *fHandle) {
FILE *fptr;
opening file
initialise fields in fHandle
fseek(fptr, 0L, SEEK_SET);
fwrite(fHandle, PAGE_SIZE, 1, fptr);
}
Я называю это из другой функции... таким образом
void test(){
filehandle fHandle;
openPageFile(&fHandle);
}
и fhandle struct - это...
typedef struct FileHandle {
char *fileName;
//some other fields
} fileHandle;
это дает мне разные результаты.
на оконной системе, работает отлично. на ubuntu 12.04, он не дает никакой ошибки, но он не пишет никаких данных. на ubuntu 13.10, это дает мне ошибку seg в строке fwrite.
Я использовал valgrind, чтобы проверить утечку памяти, и вот моя трассировка стека.
Process terminating with default action of signal 11 (SIGSEGV)
==3118== Access not within mapped region at address 0x4051EB
==3118== at 0x4EB44A0: __GI_mempcpy (memcpy.S:166)
==3118== by 0x4EA4EFD: _IO_default_xsputn (genops.c:463)
==3118== by 0x4EA3611: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1356)
==3118== by 0x4E9973C: fwrite (iofwrite.c:43)
Я не могу точно понять, что происходит...
Не используйте константу PAGE_SIZE
с fwrite
, вместо этого используйте sizeof(*fHandle)
. Отдельно напишите или PAGE_SIZE
добавить любое дополнение, необходимое, если вам нужно сопоставить PAGE_SIZE
на выходе.
(Я не совсем уверен, сколько смысла писать struct FileHandle
таким образом, хотя, поскольку вы будете писать, например, адрес памяти в char *fileName
а не строку имени файла. напишите поля отдельно в этом случае.)