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

标签 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.
}

最后一行让我感到各种悲伤。它确实有效,我可以在调试输出中看到有多少小动物正在攻击玩家;但每当人工智能对目标失去兴趣时,它就会导致崩溃。我知道这与指针有关,但在代码上撒上星号会导致“无效间接”或“间接级别不同”。我对如何在没有任何奇怪的指针内容的情况下检索 aiTarget->attackerList.count 的值感到非常困惑。

最佳答案

您需要首先为每个结构分配内存,因此在代码中进行以下更改

void attackTarget(Player* target) 
{
   AggroVars* aiTarget = malloc(sizeof(AggroVars));

   aiTarget->attackerList.count++;

   target->aiAttackers = aiTarget->attackerList.count;

}

关于c - 尝试从结构中检索 U32 时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043214/

相关文章:

c++ - 为什么我可以做 "delete p;",而不是 "delete (p+1);"?为什么 delete 需要左值?

c# - Mono C# PInvoke - 从外部库获取 CFString

c - 有没有一种简单的方法可以让用户在每次选择后返回到菜单?

C函数修改inode?

c - 存储 BMP 文件的像素值

C:两种数组初始化之间的差异

arrays - 在 C 的 while 循环中迭代 *str 与 str[]

visual-studio - 如何在 Visual Studio 中使自动换行尊重缩进?

c++ - 从第 3 方库导出 cpp 损坏的函数

.net - WPF WrapPanel 中某些项目的高度为 *