这是我的#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中的动态内存分配不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)