分配实例化结构时出现段错误?

时间:2011-02-13 22:40:10

标签: c pointers

struct queens_arg {
  int board[64]; 
  int focus_idx;
};

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

代码如下。我在设置focus_idx = 0时发生了一个seg错误(已调试)。为什么会这样?我该如何解决?谢谢!

3 个答案:

答案 0 :(得分:2)

这是因为您使用了指针,但您没有分配任何内容。因此,你正在写入不属于你的记忆。

您应首先按如下方式分配args

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

然后你应该检查args != NULL。如果没有,您可以使用以下方式写入您刚分配的内存:

args->focus_idx = 0;

答案 1 :(得分:2)

问题是你正在创建一个指向struct queens_arg的指针,但你并没有将它初始化为指向任何地方。因此,当你写

(*args).focus_idx = 0;

您正在关注垃圾指针,导致运行时出现段错误。

要解决此问题,请确保将指针设置为指向某处。以下是如何让它指向动态分配的内存:

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

在相关说明中,您无需编写

(*args).focus_idx = 0;

您可以使用此简写:

args->focus_idx = 0;

这意味着完全相同,但更容易阅读。

答案 2 :(得分:0)

您只声明了一个指向queens_arg结构的指针,实际上没有结构。