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

关于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日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么