gpt4 book ai didi

c - 结构体指针与实际对象

转载 作者:行者123 更新时间:2023-11-30 20:36:56 25 4
gpt4 key购买 nike

我正在学习 C,并且正在研究以下示例。

我不完全明白为什么会这样。

typedef struct
{
char even;
int length;
} Square;

Square* square;

void make_square(void) {
Square s;
s.even = 1;
s.length = 10;
square = &s;
}

void print_square(void) {
printf("even: %u\n", square->even);
printf("size: %i\n", square->length);
}

int main() {
make_square();
print_square();
}

我会认为这段代码是不正确的,因为我们有行 square=&s ,它将我们的全局指针 square 设置为指向仅存在于函数make_square

所以理论上我认为正确的做法是*square = s。但这给了我一个段错误。

我想知道为什么后者会给我一个段错误,以及发布的方式(上面的代码)是否也是正确的或者只是偶然工作。

已解决 没有足够的代表接受正确答案

我忘记先在堆上为正方形分配空间。因此,当我按照我认为应该有效的方式尝试它时,我遇到了段错误。

最佳答案

欢迎来到 C 的危险。它并没有真正发挥作用;你有一个指向堆栈上的正方形的指针。从现在开始发生的事情将会引起问题!如果您尝试更改对象,则可能会损坏堆栈上的变量。您想要做的是 malloc 一个正方形并返回它 - 但随后您负责释放它。

关于c - 结构体指针与实际对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34476604/

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