c - 从 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 时,为什么会这样?(我假设未定义的行为)
这是学校作业的简化部分,所以我不能更改“主要”的内容。
解决方案
使用myStruct* s[2]
,您为两个指向 的指针保留内存myStruct
,但您不初始化这些指针以让它们指向有效myStruct
的 -objects。取消引用这样的(未初始化的)指针会产生未定义的行为(很可能是段错误)。
类似的命令
s[0] = malloc(sizeof(myStruct));
至少应该为第一个指针解决这个问题。
推荐阅读
- r - Network_plot '名称' 属性
- jdbc - 要使用哪个 jtopen jar
- enums - 声纳污染分析:javasecurity:S5131:强制清理 Java 枚举:
- swiftui - 是否可以让 SwiftUIPager 使用最新版本滚动图标?
- docx4j - 如何打印两个应该在同一行左右对齐的单词
- python - 将日期时间类型值插入 SQL 数据库
- javascript - 前端:我应该清理通过 Amazon Lambda 发送的电子邮件表单吗?
- stored-procedures - Teradata - 存储过程中的 While 循环不起作用
- python - 如何将 pytest-benchmaark 输出保存到 Excel 工作表
- c++ - 针对简单条件改进 C++ 风格