C 整数的动态数组与否?

C 整数的动态数组与否?,c,arrays,struct,C,Arrays,Struct,如果我在一个类中创建一个结构,那么 typedef struct { int numberOfTiles; // an array of ints here int *tileArray; } CollisionLayer; 是否可以创建一个包含空[]的整数数组,并在创建时设置大小?或者如何创建此阵列?动态地使用指针?创建这些结构“对象”时,我会知道数组的大小,如果可以在创建时填写数组的大小,那么如何在上面的结构中声明数组?您需要自己初始化数组: Coll

如果我在一个类中创建一个结构,那么

typedef struct
{     
    int numberOfTiles;
    // an array of ints here
    int *tileArray; 

} CollisionLayer;

是否可以创建一个包含空[]的整数数组,并在创建时设置大小?或者如何创建此阵列?动态地使用指针?创建这些结构“对象”时,我会知道数组的大小,如果可以在创建时填写数组的大小,那么如何在上面的结构中声明数组?

您需要自己初始化数组:

CollisionLayer layer;
layer.numberOfTiles = numberOfTiles;
layer.tileArray = (int*)malloc(sizeof(int) * numberOfTiles);
或者,如果要在堆上创建结构:

CollisionLayer* pl  = (CollisionLayer*)malloc(sizeof(CollisionLayer));
pl->numberOfTiles = numberOfTiles;
pl->tileArray = (int*)malloc(sizeof(int) * numberOfTiles);

// When you are done:
free(pl->tileArray);
free(pl);
另一个选项是将固定大小限制硬编码到
碰撞层
,例如:

typedef struct
{     
    int numberOfTiles;
    // an array of ints here
    int tileArray[100]; 

} CollisionLayer;

当然,这在所有方面都不太理想,但如果您不想手动管理内存,这是您唯一的选择。

如果您在编译时不知道内存大小,则必须在运行时使用malloc()分配内存。要在C中使用实际数组,必须知道编译代码时的大小。

Tilerray是指向int的指针。应使用malloc/calloc创建它将指向的对象。在创建CollisionLayer的对象时应该发生这种情况


定义数组[]为空的结构不是一个好主意,请参阅。它谈到C++,也应该适用于C。

< P> VLAs不能是结构的成员,所以当你创建StRoT对象时,需要分配内存为<代码> MalOC 。CollisionLayer是否需要malloced?@Helium3:只有当您想要完全控制其生存期时,才需要malloced(因为当一个局部超出范围时,而不是当您希望它超出范围时,等等)。这与让你
malloc
数组的原因不同:你不知道它在编译时会有多大。我肯定想手动管理内存。所以如果我想让这个碰撞层有生命,创建指针是正确的吗?这是如何产生的?Malloc结构,然后Malloc数组?@Helium3:是的。我已经更新了答案来说明如何——基本上就是你说的。@Jon:太好了,谢谢:)我不知道为什么从obj c跳到c比我想象的要难。另一件事,如果我的代码正在执行,并且调度程序出于某种原因将控制移动到另一个任务,那么以任何一种方式(在堆上或堆栈上)创建对象都会受到影响吗?例如,如果创建了指针,并且调度程序终止/干预了进程,那么指向的内存是否会丢失?