我正在使用全局结构,因此我可以从任何地方设置/获取错误或状态。它工作正常,现在我遇到了麻烦。
结构
typedef struct program Program;
struct program
{
int error;
int state;
};
// global declarations
Program *program;
初始化
void init_memory(void)
{
program = malloc(sizeof(Program));
if(program == NULL)
{
print_error(E_MEM_ALLOC);
exit(EXIT_FAILURE);
}
program->state = S_NONE;
program->error = E_OK;
}
此处程序崩溃,当我删除“program-> error = ....”程序工作正常...我不知道原因:/
void check_file(char *filename)
{
FILE *file = fopen(filename, "r");
if(file == NULL)
{
program->error = E_FILE_OPEN;
return;
}
fclose(file);
}
答案 0 :(得分:2)
使program
指针显得不必要,为什么不将其设为实际的struct
:
Program program = { .error = E_OK, .state = S_NONE };
然后您不必担心分配它(并且确实可以完全删除init_memory
)。只需更改其成员的访问权限即可使用.
代替->
,即program.error = E_FILE_OPEN
。