struct queens_arg {
int board[64];
int focus_idx;
};
struct queens_arg *args;
(*args).focus_idx = 0;
代码如下。在设置focus_idx = 0
时发生seg故障(已调试)。这是为什么发生?我该如何解决它?谢谢!分配实例化结构时出现Seg错误?
struct queens_arg {
int board[64];
int focus_idx;
};
struct queens_arg *args;
(*args).focus_idx = 0;
代码如下。在设置focus_idx = 0
时发生seg故障(已调试)。这是为什么发生?我该如何解决它?谢谢!分配实例化结构时出现Seg错误?
的问题是,你要创建一个指向struct queens_arg
,但你不初始化它指向任何地方。因此,当你写
(*args).focus_idx = 0;
你正在跟随一个垃圾指针,在运行时导致segfault。
要解决此问题,请确保您设置指向某处的指针。这里是你如何把它指向动态分配的内存:
struct queens_arg* args = malloc(sizeof (struct queens_arg));
与此相关的,你不需要写
(*args).focus_idx = 0;
您可以使用它代替简写:
args->focus_idx = 0;
这意味着完全一样的东西,但是更容易阅读。
发生这种情况是因为您使用了指针,但您没有分配任何东西。因此,你正在写入不属于你的记忆。
你应该首先分配args
如下:
struct queens_arg *args = malloc(sizeof(struct queens_arg));
那么你应该检查是否args != NULL
。如果没有,你可以写信给你刚才分配的内存,使用:
args->focus_idx = 0;
您只声明了一个指向queens_arg
结构体的指针,实际上不存在结构体。
真棒,谢谢! – nubela 2011-02-13 22:49:33