我的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;
}

当我运行此命令时,它可用于钢铁剑,但是一旦到达 Mithril 剑,它就会卡在wep->name = name上。

有人有什么想法吗?

最佳答案

当您将指向weaponNode的指针传递给initializeWeapons函数时,几乎就像传递了一个指针数组,这不是您所拥有的。

更改initializeWeapons函数以仅获取指向weaponNode结构的指针,并将其传递给例如setWeapon使用类似于setWeapon(wep + 1, ...)的指针算术,或者使用类似于setWeapon(&wep[1], ...)的address-of运算符。

08-16 19:32