在纯C中对struct进行内存分配

Pad*_*van 0 c memory-management

我有一个结构,它呈现我的数据元素

struct myElement
{
    int field1;
    int field2;
    int field3;    
};
Run Code Online (Sandbox Code Playgroud)

另一个结构,包含这些元素的数组和另一些数据

struct myArray 
{
    struct myElement *elements;
    int someData;
};
Run Code Online (Sandbox Code Playgroud)

我需要有这样的数组的数组

struct myArray *myMatrix;
Run Code Online (Sandbox Code Playgroud)

但是我的内存分配有问题.myArray中的元素数量也可能不同,在myMatrix中也是如此,所以我需要动态分配内存.在这种情况下分配和释放内存的正确方法是什么?

Aus*_*oke 5

下面是一个小例子,说明如何在一个动态数组中分配(malloc)和释放(free)动态struct myElement数组struct myArray.另请注意,您需要跟踪数组的大小,因此我添加size_t elements_len;struct myArray(原谅camelCase和下划线的组合 - 我在C中使用下划线,但不想修改您的标识符):

#include <stdlib.h>

struct myElement
{
    int field1;
    int field2;
    int field3;    
};

struct myArray 
{
    struct myElement *elements;
    size_t elements_len;
    int someData;
};

void allocate_elements(struct myArray *m, size_t length)
{
   m->elements = malloc(length * sizeof( *m->elements) );
   m->elements_len = length;
}

void free_elements(struct myArray *m)
{
   free(m->elements);
   m->elements = NULL;  /* point to NULL to signify no array allocated */
   m->elements_len = 0; /* length of 0 also signifies no elements/no array */
}

int main(void)
{
   struct myArray ma;

   allocate_elements(&ma, 5);
   free_elements(&ma);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

应用类似的逻辑以获得动态数组struct myArray.你有malloc足够的内存用于X的数量struct myArray,那么你可以调用该数组中的for每个struct myArray元素allocate_elements.然后,一旦完成并调用,就遍历数组中的每个元素free_elements.