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

C中的动态内存分配不起作用,第1张

概述我正在尝试在C中创建一个需要动态大小的数组的游戏,但是即使相同的代码在我的另一个程序中工作,我的代码也无法运行. 这是我的#includes #include <stdio.h>#include <stdlib.h>#include <string.h>#include "SwinGame.h" //API for graphics, physics etc#include <math.h 我正在尝试在C中创建一个需要动态大小的数组的游戏,但是即使相同的代码在我的另一个程序中工作,我的代码也无法运行.

这是我的#includes

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

以下是我使用的相关结构的typedef:

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->数据来调用未定义的行为.在使用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是空指针常量,可以安全地转换为指针NulL.与NulL不同,0将在不包含任何标头的情况下工作.当然你可以使用enemIEs.data = NulL;包含适当的标题.

总结

以上是内存溢出为你收集整理的C中的动态内存分配不起作用全部内容,希望文章能够帮你解决C中的动态内存分配不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1218431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存