gpt4 book ai didi

c - 为什么我在 C 中会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:53 25 4
gpt4 key购买 nike

我一直在学习 C 中的结构,当我尝试执行这段代码时,我遇到了段错误。

struct hero {
char *name;
struct hero_properties *prop;
};

struct hero_properties {
int damage;
int health;
};

int main(int argc, char **argv)
{
struct hero pudje;

define_hero_name(&pudje, "pudje");
set_hero_properties(&pudje, 65, 760);
get_hero_info(&pudje);

return 0;
}

void set_hero_properties(struct hero *name, int damage, int health)
{
name->prop->damage = damage;
name->prop->health = health;
}

void define_hero_name(struct hero *name, char *d_name)
{
name->name = d_name;
}

void get_hero_info(struct hero *name)
{
printf("%s characteristics:\n", name->name);
printf("damage: %d\n", name->prop->damage);
printf("health: %d\n", name->prop->health);
}

我意识到这是那个表达的错误,但为什么呢?

name->prop->damage = damage;
name->prop->health = health;

最佳答案

这里的问题是 hero 结构只保留指向 hero_properties 结构的指针。它本身的指针不会给你一个实际的内存来写入属性。由于英雄与其属性之间存在紧密联系,您可能希望将 hero_properties 结构作为 hero 结构的一部分。但是,这需要在 hero 之前定义 hero_properties 结构:

struct hero_properties {
int damage;
int health;
};

struct hero {
char *name;
struct hero_properties prop;
};

然后您必须使用点符号而不是箭头来访问元素:

name->prop.damage = damage;

关于c - 为什么我在 C 中会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43823802/

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