C中的动态内存分配不起作用

安德鲁

我正在尝试制作一个需要使用C动态调整数组大小的游戏,但是即使相同的代码在我的另一个程序中也可以工作,但是我的代码却无法正常工作。

这是我的 #includes

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SwinGame.h" //API for graphics, physics etc
#include <math.h>

这是我typedefs的相关structs使用过的:

typedef struct position_data
{
  double x;
  double y;
} position_data;

typedef enum enemy_type_data {CIRCLE, TRIANGLE, SQUARE} enemy_type_data;

typedef struct enemy_data
{
  position_data location;
  enemy_type_data type;
  bitmap bmp;
  double health;
  double speed;
  int path_to;
} enemy_data;

typedef struct enemy_data_array
{
  int size;
  enemy_data *data;
} enemy_data_array;

这是向数组添加元素的函数:

void add_enemy(enemy_data_array *enemies)
{
  enemy_data *new_array;
  enemies->size++;
  new_array = (enemy_data *)realloc(enemies->data, sizeof(enemy_data) * enemies->size);
  if (new_array) //if realloc fails (ie out of memory) it will return null
  {
    enemies->data = new_array;
    // enemies->data[enemies->size - 1] = read_enemy_data();
    printf("Enemy added successfully!\n");
  }
  else
  {
    printf("FAILED. Out of Memory!\n");
    enemies->size--;
  }
}

这是我在主过程中的函数调用和变量声明:

int main()
{
  path_data my_path[41];
  enemy_data_array enemies;
  enemies.size = 0;
  add_enemy(&enemies);
}

为什么这不起作用?

迈克猫

通过在具有自动存储持续时间的未初始化变量中传递不确定值调用未定义行为enemies->data使用之前将其初始化add_enemy()

int main()
{
  path_data my_path[41];
  enemy_data_array enemies;
  enemies.size = 0;
  enemies.data = 0; /* add this line */
  add_enemy(&enemies);
}

0是一个空指针常量,可以安全地转换为pointer NULL不像NULL0可以在不包含任何标题的情况下工作。当然,您可以使用enemies.data = NULL;适当的标头来使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中的动态内存分配

来自分类Dev

C中静态内存分配与动态内存分配的成本

来自分类Dev

C中的动态内存分配:Realloc中的问题

来自分类Dev

C ++ 11中的动态内存分配是线程安全的吗?

来自分类Dev

C ++中动态内存分配的运行时错误

来自分类Dev

没有malloc的c中的动态内存分配

来自分类Dev

在C中的结构内的指针数组的动态内存分配

来自分类Dev

如何使用动态内存分配处理C中的矩阵?

来自分类Dev

从R语言调用的C函数中的动态内存分配

来自分类Dev

动态内存分配中的C编程问题

来自分类Dev

嵌入式C中的动态内存分配

来自分类Dev

在c中打印结构的字段(动态内存分配)

来自分类Dev

C中具有动态内存分配的指针向量

来自分类Dev

重新分配内存在c中不起作用

来自分类Dev

重新分配内存在c中不起作用

来自分类Dev

MPI中的动态内存分配

来自分类Dev

CUDA内核中的动态内存分配

来自分类Dev

结构中数组的动态内存分配

来自分类Dev

动态内存分配(C编程)

来自分类Dev

使用“ new”的c ++动态内存分配

来自分类Dev

数组C的动态内存分配

来自分类Dev

C动态内存分配如何工作

来自分类Dev

C ++动态内存分配奇怪的输出

来自分类Dev

C: fork() 动态内存分配

来自分类Dev

C中的动态分配不起作用

来自分类Dev

c中的动态内存分配,释放使用malloc()之前分配的部分内存

来自分类Dev

分配内存不起作用

来自分类Dev

类中的动态内存(分配内存并访问元素)

来自分类Dev

CUDA,内核内存印记中的动态内存分配?