从结构中分配和释放数组的内存

时间:2014-09-10 13:53:54

标签: c arrays malloc clear

我有以下结构:

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;

谁能帮帮我? 谢谢!

1 个答案:

答案 0 :(得分: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 *));