从结构中分配和释放一个数组的内存[关闭]

问题描述 投票:-2回答:1

我有以下结构。

typedef struct
{
    char *name[10];
    char *msg[100];
} Log;

我如何从Log结构中释放名字和msg数组?我知道free只用于动态分配,而动态分配在结构中不起作用。我可以做什么?

试过了,但给出了错误。

typedef struct
{
    char *name[] = (char *)malloc(sizeof(char) * 10);
    char *msg[] = (char *)malloc(sizeof(char) * 100);
} Log;

谁能帮帮我?

c arrays malloc
1个回答
3
投票

声明一个结构并不为其成员分配内存。当一个结构的实例被创建时,才会分配内存。所以

typedef struct
{
    char *name[10];
    char *msg[100];
} Log;  

不为 namemsg,它只是声明 Log 作为一个新的数据(用户定义)类型。但当你创建它的一个实例时

Log log_flie;

内存分配给 namemsg. 现在,你可以为数据成员的元素分配内存(动态),如

for(int i = 0; i < 10; i++)
    log_file.name[i] = malloc(N);  //N is the desired size  

同样,你也可以为 msg.

要释放 动态分配内存呼叫 free 作为

for(int i = 0; i < 10; i++)
    free(log_file.name[i]);    

如果你想为 namemsg 动态地进行如下操作

typedef struct
{
    char **name;
    char **msg;
} Log;  

然后

Log log_file;
log_file.name = malloc(10 * sizeof(char *));
log_file.msg = malloc(100 * sizeof(char *));  
© www.soinside.com 2019 - 2024. All rights reserved.