我一直在学习C语言中的结构,当我尝试执行这段代码时,出现了Segmentation错误。为什么我在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;
使其指向任何地方和不确定的行为随之而来你永远不指定任何东西'prop'。将编译器的警告和错误转到最大值。也开始使用调试器,它会告诉你发生了什么事情。 –
,但是当我在gdb中调试这个时 print name-> prop-> damage 这不是错误,我看到一个正确的结果 – Devart
你的'define_hero_name'函数也没有做你认为它的工作。它不会复制名称。相反,它只会复制指向该名称的指针。根据您稍后在游戏中的使用情况,读取此名称可能也会导致分段错误。 – FRob