使用文件类型为-C的结构时接收分段错误

使用文件类型为-C的结构时接收分段错误,c,struct,typedef,C,Struct,Typedef,当我试图通过使用fopen和包含文件类型的struct打开一个文件时,我一直收到一个分段错误。C新手,如果这是一个noob问题,很抱歉。 结构的代码: typedef struct _FileInternal { FILE* fp; char mem[2]; } FileInternal; // file handle type typedef FileInternal* File; 打开文件的代码: File open_file(char *name) { File a;

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

  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”); 返回错误


非常感谢您的帮助

文件
是一种指针类型,它使
成为一个
指针
a
从未初始化为指向有效的
FileInternal
结构,因此取消对它的引用可能会导致seg故障。

以前未进行内存分配就取消对指针的引用,要解决此问题,请执行以下操作:

File open_file(char *name) {
  File a = (File) malloc(sizeof(FileInternal));

请看这是检方的一个展品-答案是“否”(除非你正在处理函数指针)。还要注意,从下划线开始的名字,后面再加上另一个下划线或大写字母,以供执行时使用。不要创建以下划线开头的名称(简单但安全)。或者阅读C标准中§7.1.3保留标识符中的完整规则,以及相关标准(如POSIX)中的类似章节。键入定义指针不是一个好主意,因为ot会使代码不可读(您知道什么是指针,什么是实际对象等,因为它不是来自声明)。唯一的例外是函数指针。@JonathanLeffler:在文件范围内,每个以下划线开头的名称都是保留的。