weidu23 2021-12-23 17:01 采纳率: 0%
浏览 41

关于C程序结构体分配内存的释放问题

众所周知,结构体中的属性变量也可以是结构体,于是,可以通过以下方式定义:

struct MyStrtu{
    char*a;
};

struct Global
{
    int *a;
    struct MyStrtu *stringOperaterP; // 字符串处理
};
typedef struct Global Global;

这时候,我们可以通过以下方式生成结构体对象并分配内存:

Global* obj = (Global *)malloc(sizeof(Global));

obj结构体对象分配内存后,实际上,obj的属性变量stringOperaterP也就分配了对应指针的内存。
那么问题来了:
1、我们在后续使用stringOperaterP指针时,首先需要分配内存,即 obj->stringOperaterP=(MyStrtu*)malloc(sizeof(MyStrtu)),这样做,那么原本obj被malloc时,分配给stringOperaterP指针的空间不是就变成了没有指针指向的“野空间”了吗?
2、如果为stringOperaterP进行内存分配,即malloc,那么free掉obj前,是不是要先free掉stringOperaterP指针的空间呢?

这两个问题困扰我许久,望指教!

  • 写回答

3条回答 默认 最新

  • _GX_ 2021-12-23 17:12
    关注
    1. stringOperator只是指针,分配obj时其初始值没有意义
    2. free要和malloc匹配,free顺序要跟malloc顺序相反
    评论

报告相同问题?

问题事件

  • 创建了问题 12月23日