我有以下结构:
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;
谁能帮帮我? 谢谢!
答案 0 :(得分:3)
声明结构不为其成员分配内存。在创建结构实例时分配内存。所以
typedef struct
{
char *name[10];
char *msg[100];
} Log;
不为name
和msg
分配内存,它只是将Log
声明为新数据(用户定义)类型。但是当你创建它的实例时
Log log_flie;
内存分配给name
和msg
。现在,您可以(动态)为数据成员的元素分配内存
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]);
如果您想动态分配name
和msg
的内存,请执行以下操作
typedef struct
{
char **name;
char **msg;
} Log;
然后
Log log_file;
log_file.name = malloc(10 * sizeof(char *));
log_file.msg = malloc(100 * sizeof(char *));