我的C程序有一个奇怪的问题。我试图跟踪在我的小游戏中创建的武器的名称和奖励,但是,初始化了几把武器后程序崩溃了。
这是我的武器结构:
typedef struct weaponTag {
char *name;
int bonus;
} weaponNode;
在这里,我为制造6种不同的武器分配了足够的内存:
weaponNode *wep = malloc(sizeof(weaponNode) * 6);
initializeWeapons(&wep);
initializeWeapons
使用wep
之前创建的的地址进行调用:
void initializeWeapons(weaponNode **wep)
{
printf("Initializing weapons...\n");
setWeapon(wep[0], "Iron sword", 2);
setWeapon(wep[1], "Steel sword", 4);
setWeapon(wep[2], "Mithril sword", 7);
setWeapon(wep[3], "Adamantine sword", 11);
setWeapon(wep[4], "Dark Magic sword", 16);
setWeapon(wep[5], "Diamond sword", 23);
}
然后setWeapon
,我呼吁要创建的每种武器:
void setWeapon(weaponNode *wep, char *name, int bonus)
{
wep->name = name;
wep->bonus = bonus;
}
当我运行此程序时,它可以用于钢铁剑,但是一旦到达秘银剑,它就会卡在上面wep->name = name
。
有人有什么想法吗?
当您传递一个指向weaponNode
该initializeWeapons
函数的指针的指针时,这几乎就像传递一个指针数组一样,而这并不是您所拥有的。
将initializeWeapons
函数更改为仅获取指向weaponNode
结构的指针,然后将其传递给(例如)setWeapon
使用指针算术,setWeapon(wep + 1, ...)
或在此处使用address-of运算符setWeapon(&wep[1], ...)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句