当我尝试将结构中的 char* 类型的元素设置为特定字符串时,C 程序崩溃了?
C program crashes when I tried to set an element of type char* in my struct to a specific string?
我的 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, ...)
这样的指针算法,或者像 setWeapon(&wep[1], ...)
.
这样使用寻址运算符
我的 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, ...)
这样的指针算法,或者像 setWeapon(&wep[1], ...)
.