使用具有FILE类型的结构时接收分段错误 - C

时间:2017-09-17 19:26:15

标签: c struct typedef

尝试通过使用fopen和包含FILE类型的结构打开文件时,我一直收到分段错误。新来的C很抱歉,如果这是一个菜鸟问题。 结构代码:

  typedef struct _FileInternal {
  FILE* fp;
  char mem[2];
} FileInternal;

// file handle type
typedef FileInternal* File;

打开文件的代码:

File open_file(char *name) {
  File a;

  fserror=NONE;
  // try to open existing file
  a->fp=fopen(name, "r+");
  if (! a->fp) {
    // fail, fall back to creation
    a->fp=fopen(name, "w+");
    if (! a->fp) {
      fserror=OPEN_FAILED;
      return NULL;
    }
  }
  return a;
}

尝试 档案f; F =的fopen(" newfile.dat&#34); 返回错误

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

@CreatedDate protected ZonedDateTime createdAt; @LastModifiedDate protected ZonedDateTime modifiedAt; 是一种指针类型,它使File成为指针。永远不会初始化a以指向有效的a结构,因此解除引用它可能会导致seg错误。

答案 1 :(得分:0)

您之前没有进行内存分配就已取消引用指针,为解决此问题,请执行以下操作:

class TimePeriod:
    def __init__(self, *units):
        self.seconds = Seconds(sum(unit.to_seconds() for unit in units))

    def __repr__(self):
        seconds = self.seconds

        weeks = Weeks.from_seconds(seconds)
        seconds -= weeks.to_seconds()

        days = Days.from_seconds(seconds)
        seconds -= days.to_seconds()

        hours = Hours.from_seconds(seconds)
        seconds -= hours.to_seconds()

        minutes = Minutes.from_seconds(seconds)
        seconds -= minutes.to_seconds()

        seconds = Seconds(seconds)

        return ' '.join(f'{unit} {unit.__class__.__name__}' for unit in (weeks, days, hours, minutes, seconds) if unit)

    def __str__(self):
        return repr(self)