我被要求完成其他人启动的代码,我对如何在结构中复制U32值感到困惑。这些是各种结构的相关部分;请注意,我正在修剪很多,因为这些是一些非常重要的结构:
typedef struct AttackerList {
U32 count;
} AttackerList;
typedef struct AggroVars {
AttackerList attackerList;
}
typedef struct Player {
U32 aiAttackers;
}
现在,在我试图修改的函数中:
void attackTarget(Player* target) {
AggroVars* aiTarget;
// Tons of code here.
aiTarget->attackerList.count++;
target->aiAttackers = aiTarget->attackerList.count;
// Tons more code here.
}
最后一行是导致我各种悲伤的那一行。它确实有效,我可以在调试输出中看到有多少生物在攻击玩家;但是当AI失去对目标的兴趣时,它会导致崩溃。我知道这与指针有关,但在代码上撒上星号会导致“无效间接”或“间接级别不同”。我非常难以理解如何只检索aiTarget-> attackerList.count的值而没有任何奇怪的指针内容。
答案 0 :(得分:0)
我建议在这些变量初始化或修改后看不到的大量代码中插入断言,而不是“撒上星号”:
#include <assert.h>
...
assert (target != NULL);
assert (aiTarget != NULL);
这可能会指向正确的方向。
答案 1 :(得分:0)
首先需要为每个结构分配内存,以便在代码中进行以下更改
void attackTarget(Player* target)
{
AggroVars* aiTarget = malloc(sizeof(AggroVars));
aiTarget->attackerList.count++;
target->aiAttackers = aiTarget->attackerList.count;
}