众所周知,结构体中的属性变量也可以是结构体,于是,可以通过以下方式定义:
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指针的空间呢?
这两个问题困扰我许久,望指教!