如何释放()由Malloc()分配的结构数组? [英] How to free() an array of structs allocated by malloc()?

查看:0
本文介绍了如何释放()由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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆