我有以下结构:
typedef struct
{
char *name[10];
char *msg[100];
} Log;
如何从日志结构中释放名称和消息数组?我知道free只用于动态分配,而动态分配在结构中不起作用。我能做什么?
尝试过,但出现错误:
typedef struct
{
char *name[] = (char *)malloc(sizeof(char) * 10);
char *msg[] = (char *)malloc(sizeof(char) * 100);
} Log;
谁能帮我?谢谢
声明结构不会为其成员分配内存。创建结构实例时会分配内存。所以
typedef struct
{
char *name[10];
char *msg[100];
} Log;
不为name
和msg
分配内存,它只是将Log
声明为新的数据(用户定义的)类型。但当你创建一个实例时
Log log_flie;
为CCD_ 4和CCD_。现在,您可以(动态)为中的数据成员元素分配内存
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 *));