[英]Seg fault when assigning an instantiated struct?
struct queens_arg {
int board[64];
int focus_idx;
};
struct queens_arg *args;
(*args).focus_idx = 0;
代码如下。 在设置focus_idx = 0
发生段错误(已调试)。 为什么会这样呢? 我该如何解决? 谢谢!
发生这种情况是因为您使用了一个指针,但没有分配任何东西。 因此,您正在写入不是您自己的内存。
您应该首先按以下方式分配args
:
struct queens_arg *args = malloc(sizeof(struct queens_arg));
然后,您应该检查args != NULL
。 如果没有,您可以使用以下方法写入刚刚分配的内存:
args->focus_idx = 0;
问题是您正在创建一个指向struct queens_arg
的指针,但没有将其初始化为指向任何地方。 因此,当你写
(*args).focus_idx = 0;
您正在跟踪垃圾指针,从而在运行时导致段错误。
要解决此问题,请确保将指针设置为指向某处。 您可以通过以下方法将其指向动态分配的内存:
struct queens_arg* args = malloc(sizeof (struct queens_arg));
在相关说明中,您不需要写
(*args).focus_idx = 0;
您可以改用以下速记:
args->focus_idx = 0;
它的含义完全相同,但更易于阅读。
您只声明了一个指向queens_arg
结构的指针,实际上不存在任何结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.