【发布时间】:2013-11-22 11:46:31
【问题描述】:
我正在使用全局结构,因此我可以从任何地方设置/获取错误或状态。它工作正常,现在我遇到了麻烦。
结构
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);
}
【问题讨论】:
-
什么是
program?全局变量?您正在使用与结构同名的变量,而该结构又与typedef'd 别名的名称相同? -
可能是个愚蠢的问题,但你真的在
check_file之前打电话给init_memory吗? -
问题似乎不在这里。显示更多代码。
-
@FilipeGonçalves
foo foo;无效。 -
@FilipeGonçalves 我正要发表评论说完全相同:) 换句话说,
typedef struct foo { int foo } foo foo;无效,但typedef struct foo { int foo } foo; void func(void){ foo foo;}有效。
标签: c