这是我的代码......我有一个功能......
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;
这给了我不同的结果。
在Windows系统上,它的工作正常。 在ubuntu 12.04上,它没有给出任何错误,但它没有写任何数据。 在ubuntu 13.10上,它给出了fwrite行中的seg错误。
我使用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)
我无法弄清楚到底发生了什么......
答案 0 :(得分:1)
不要将常量PAGE_SIZE
与fwrite
一起使用,而是使用sizeof(*fHandle)
。如果需要在输出中匹配PAGE_SIZE
,请分别编写或寻求添加任何必要的填充。
(我并不完全确定以这种方式编写struct FileHandle
有多大意义,因为你要编写,例如char *fileName
的内存地址而不是文件名字符串。在这种情况下,您需要单独编写字段。)