2011-02-13 60 views
0
struct queens_arg { 
    int board[64]; 
    int focus_idx; 
}; 

struct queens_arg *args; 
(*args).focus_idx = 0; 

代码如下。在设置focus_idx = 0时发生seg故障(已调试)。这是为什么发生?我该如何解决它?谢谢!分配实例化结构时出现Seg错误?

回答

2

的问题是,你要创建一个指向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; 

这意味着完全一样的东西,但是更容易阅读。

+0

真棒,谢谢! – nubela 2011-02-13 22:49:33

2

发生这种情况是因为您使用了指针,但您没有分配任何东西。因此,你正在写入不属于你的记忆。

你应该首先分配args如下:

struct queens_arg *args = malloc(sizeof(struct queens_arg)); 

那么你应该检查是否args != NULL。如果没有,你可以写信给你刚才分配的内存,使用:

args->focus_idx = 0; 
0

您只声明了一个指向queens_arg结构体的指针,实际上不存在结构体。

相关问题