You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何释放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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:45:04