【问题标题】:Segmentation fault when using fread() function使用 fread() 函数时出现分段错误
【发布时间】:2022-01-14 12:23:48
【问题描述】:

我有以下结构和数组

#define PAGE_SIZE 256

typedef struct frame_attribute {
    
    signed char content[PAGE_SIZE];

} frame;

frame pmemory[64];

我正在尝试通过以下方式使用 fread() 将 256 个字节读入内容数组,

fread(pmemory[id].content, sizeof(pmemory[id]), PAGE_SIZE, filePointer);

它给了我一个分段错误。我不确定是什么问题

【问题讨论】:

  • 您只能将PAGE_SIZE 字节读入该成员,而不是(有效地)sizeof(pmemory[id]) * PAGE_SIZE 字节。另外id 必须在0...63 范围内。
  • 同时检查fopen是否真的成功了。

标签: c struct segmentation-fault fread


【解决方案1】:

您将读取变量pmemory[id].content,其大小为PAGE_SIZEsizeof(pmemory[id]) * PAGE_SIZE 字节,实际上不小于PAGE_SIZE * PAGE_SIZE 字节

fread(pmemory[id].content, sizeof(pmemory[id]), PAGE_SIZE, filePointer);

调用未定义的行为。

你至少需要写

fread(pmemory[id].content, PAGE_SIZE, 1, filePointer);

fread(pmemory[id].content, sizeof( pmemory[id].content ), 1, filePointer);

【讨论】:

    【解决方案2】:

    来自男人:

    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    
    The  function  fread()  reads nmemb items of data,
    each size bytes long, from the stream pointed to by stream,
    storing them at the location given by ptr.
    

    我认为问题在于您使用的是sizeof(pmemory[id]),请尝试将其更改为sizeof(signed char)

    您要读取 PAGE_SIZE 项数据以保存在 signed char 数组中,因此这些项的大小必须为 signed char

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2020-04-20
      • 2011-01-08
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      相关资源
      最近更新 更多