gpt4 book ai didi

c - 当所有值都不为空时,结构体出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:29:10 25 4
gpt4 key购买 nike

char *s = sbrk(some_num); 
if (s != (char *)-1) {
some_struct = (SomeStruct *)s;
some_struct->num = 8; //num is an int [*SEG FAULT OCCURS ON THIS LINE*]
}

使用 gdb 进行调试:

p some_struct  => (SomeStruct *) 0xef7100
p some_struct->num => 0

从之前的问答中,我了解到当某些内容为 NULL 时会发生段错误,但在本例中,some_struct、some_struct->num 和 8 都是非 NULL。 p>

为什么会出现段错误?如何将 some_struct->num 设置为某个 int 值?

最佳答案

指针 some_struct 需要指向一些有效的内存。如果函数 some_function 返回指向某个局部 volatile 变量的指针,则当 some_function 退出时该变量将丢失。

为了避免段错误,您可以将 some_function 中的局部变量声明为静态,或者可以通过让 some_function 调用 malloc 从堆中分配内存。如果 some_function 使用 malloc 分配内存,则调用者有责任确保稍后释放内存。

避免段错误的另一种方法是不返回指向局部变量的指针,而是返回全局变量。然而,大多数人都同意应该避免全局变量。

关于c - 当所有值都不为空时,结构体出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26328325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com