尝试从结构中检索U32时程序崩溃

时间:2014-01-10 11:30:26

标签: c visual-studio pointers struct indirection

我被要求完成其他人启动的代码,我对如何在结构中复制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的值而没有任何奇怪的指针内容。

2 个答案:

答案 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;

}