我在 C 中有一个数据结构,在定义中,有一系列不同类型的指针:
typedef struct data_t{
type_0 *data_0;
...
type_n *data_n;
};
现在,假设我声明一个与 data_t 类型相同的指针,并将内存分配给该指针:
data_t data = malloc(sizeof(*data));
我有问题:首先,鉴于我已经分配了data的整个大小,我是否需要为data_t内的每个指针分配内存?
如果第一个为真,那么,data内每个指针分配的内存都具有为data分配的内存范围内的地址,否则malloc将在data范围之外分配?
我是 C 新手,所以也许我的问题不清楚。现在就让我来看看如何改进吧。谢谢。
指针正如其名称所暗示的那样,它们指向其他地方。
当您为
data
结构对象分配内存时,您为指针成员变量分配了空间,但没有为它们分配任何指向的空间。
为
data
分配内存后,需要初始化成员变量,对于指针,使它们指向有效位置。
本质上
data_t *data = malloc(sizeof(*data));
类似于
data_t actual_data_object; /* Allocate memory */
data_t *data = &actual_data_object;
您是否认为这是为指针应该指向的位置分配内存?但愿不会。当你这样做时也是一样的
malloc
。