【发布时间】:2015-06-05 06:21:20
【问题描述】:
我的 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。
有人有什么想法吗?
【问题讨论】:
-
指针对指针不是数组。它们不是二维数组。它们不是指向数组的指针。它们不是指向二维数组的指针。只需摆脱指向指针的指针并使用指向结构的普通指针即可。
-
是的,我没看到 Lundin 说什么! ...您必须使用
void initializeWeapons(weaponNode *wep)和setWeapon(wep[0], "Iron sword", 2);必须是setWeapon(wep+0, "Iron sword", 2);(或setWeapon(&wep[0],"Iron sword", 2);) -
只是挑剔:你确实意识到你正在将
const char *传递给setWeapon,对吧?你不打算稍后修改字符串(或free'ingchar *成员),因为那行不通