首页 > 解决方案 > 从 struct ** 初始化 struct - segfault

问题描述

我正在尝试将结构从指针初始化为指针。我正在使用 init 函数执行此操作。但是,这会产生段错误。我试图初始化的指针是在一个数组中定义的。当数组的大小设置为 1 时,不会发生 segfault。

typedef struct{
  int a;
}myStruct;

void init_struct(myStruct** s){
  (*s)->a=10;
}

void fun(myStruct** sp){
  init_struct(sp);
}

int main(){
  myStruct* s[2];
  fun(&s[0]);
}

我知道这是因为我正在访问我不应该访问的内存,但是为什么在这种情况下我不允许呢?当数组的大小为 1 时,为什么会这样?(我假设未定义的行为)

这是学校作业的简化部分,所以我不能更改“主要”的内容。

标签: cstructsegmentation-fault

解决方案


使用myStruct* s[2],您为两个指向 的指针保留内存myStruct,但您不初始化这些指针以让它们指向有效myStruct的 -objects。取消引用这样的(未初始化的)指针会产生未定义的行为(很可能是段错误)。

类似的命令

s[0] = malloc(sizeof(myStruct));

至少应该为第一个指针解决这个问题。


推荐阅读