如何释放()由Malloc()分配的结构数组? [英] How to free() an array of structs allocated by malloc()?
本文介绍了如何释放()由Malloc()分配的结构数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在做一个使用结构作为字符串存储的项目。我声明了一个由char类型成员组成的结构:
struct datastore1
{
char name[50];
char address[50];
char email[50];
char number[50];
char idnum[50];
};
我知道我只能做char *name, char *address...
,但假设我们将其指定为最大长度为50。然后,在使用该结构的函数上,我使用索引大小30对其进行了错误锁定:
struct datastore1 *dsdata = malloc(30 * sizeof(struct datastore1));
假设我通过访问每个索引完成了将所有字符串复制到结构中,那么我应该如何释放在调用Malloc之后使用的已分配内存?我试着在程序结束时做free(dsdata)
,但我不确定这是不是正确的方法。我应该单独释放每个索引吗?请给我开导一下。提前感谢您的反馈!
推荐答案
如何释放调用Malloc后使用的已分配内存?
考虑以下示例
struct datastore1 *obj1 = malloc(sizeof(struct datastore1));
free(obj1);
此处obj1
指向与datastore1
大小相同的内存块为了释放,您需要发送malloc
分配的地址。
同样,
struct datastore1 *obj2 = malloc(3 * sizeof(struct datastore1));
free(obj2);
obj2
指向大小为3 * sizeof(datastore1)
的连续内存块,您需要将基址传递给free
是否应分别释放每个索引?
否,因为内存块只分配一次,而您只需要free
分配一次。
让我进一步扩展,
struct datastore1 *obj3[3];
for(int i=0;i<3;i++)
obj3[i] = malloc(sizeof(struct datastore1));
for(int i=0;i<3;i++)
free(obj3[i]);
此处obj3
是指针数组,每个索引指向内存的不同部分,因此需要单独释放。
注意:为简单起见,我没有考虑malloc
的返回值。必须对malloc
返回值执行Null检查。
这篇关于如何释放()由Malloc()分配的结构数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文