我一直在學習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