如何释放C语言结构体中固定长度char类型数组的内存?
问题根因
free()仅支持释放通过malloc/calloc/realloc申请的堆内存,你错误调用free(edge->number)是报错的直接原因。- 结构体中定义的
char number[13]是内联数组成员,内存空间和结构体本身连续,你调用malloc(sizeof(Edge))时已经同步为number分配了内存,不需要单独申请,也不能单独释放。
修复方案
直接删除free(edge->number);这行代码即可,完整的正确代码如下:
typedef struct Edge { char number[13]; int numOfCalls; struct Edge *next; } Edge; // 初始化逻辑 Edge *edge = malloc(sizeof(Edge)); edge->next = NULL; strcpy(edge->number, numberOne); // numberOne 是 char[13] 类型 // 业务逻辑执行完成后释放内存 free(edge);
补充说明
只有结构体成员是char*指针类型时,才需要单独为指针指向的内容申请、释放内存,示例如下:
// 指针类型成员的结构体定义 typedef struct Edge { char *number; int numOfCalls; struct Edge *next; } Edge; // 初始化逻辑 Edge *edge = malloc(sizeof(Edge)); edge->next = NULL; edge->number = malloc(13); // 单独为字符串申请堆内存 strcpy(edge->number, numberOne); // 释放逻辑:先释放成员指针指向的内存,再释放结构体本身 free(edge->number); free(edge);
内容的提问来源于stack exchange,提问作者carlosdafield
相关产品推荐
相关产品推荐

