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中也是如此,所以我需要动态分配内存.在这种情况下分配和释放内存的正确方法是什么?
下面是一个小例子,说明如何在一个动态数组中分配(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.
| 归档时间: |
|
| 查看次数: |
2214 次 |
| 最近记录: |