C - 使用全局结构

时间:2013-11-22 11:46:32

标签: c

我正在使用全局结构,因此我可以从任何地方设置/获取错误或状态。它工作正常,现在我遇到了麻烦。

结构

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);
}

整个计划:http://pastebin.com/dwSVQ9x8

1 个答案:

答案 0 :(得分:2)

使program指针显得不必要,为什么不将其设为实际的struct

Program program = { .error = E_OK, .state = S_NONE };

然后您不必担心分配它(并且确实可以完全删除init_memory)。只需更改其成员的访问权限即可使用.代替->,即program.error = E_FILE_OPEN