gpt4 book ai didi

c++ - fwrite 因段错误而失败

转载 作者:行者123 更新时间:2023-11-28 07:04:25 25 4
gpt4 key购买 nike

这是我的代码...我有一个函数...

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 结构是 ...

  typedef struct FileHandle {


char *fileName;
//some other fields

} fileHandle;

这给了我不同的结果。

on windows system, its working fine. on ubuntu 12.04, it doesn't give any error but it doesnt write any data. on ubuntu 13.10, it gives me seg fault in fwrite line.

我使用 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_SIZEfwrite 一起使用,而是使用 sizeof(*fHandle)。如果您需要在输出中匹配 PAGE_SIZE,请单独编写或寻求添加任何必要的填充。

(不过,我不太确定以这种方式编写 struct FileHandle 有多大意义,因为您将要编写,例如,char 处的内存地址*fileName 而不是文件名字符串。在这种情况下,您需要单独编写字段。)

关于c++ - fwrite 因段错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com