我有以下结构。
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;
谁能帮帮我?
声明一个结构并不为其成员分配内存。当一个结构的实例被创建时,才会分配内存。所以
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 *));