【发布时间】:2016-08-20 15:33:52
【问题描述】:
考虑这个例子:
typedef struct {
int x;
int y;
...
} ReallyBigItem;
ReallyBigItem* array = (ReallyBigItem*) malloc(sizeof(ReallyBigItem) * 8);
ReallyBigItem* item = (ReallyBigItem*) malloc(sizeof(ReallyBigItem));
item->x = 0;
item->y = 1;
array[0] = *item;
ReallyBigItem* array = (ReallyBigItem*) malloc(sizeof(ReallyBigItem) * 8);
我正在为一个适合 8 个ReallyBigItem 结构的数组分配空间。
ReallyBigItem* item = (ReallyBigItem*) malloc(sizeof(ReallyBigItem));
我正在为ReallyBigItem 分配空间并将其内存地址存储在item 中。
array[0] = *item;
现在我将数组的第一个元素设置为该项目。
我的问题是:
= 操作符实际上是 复制 已分配的内存吗?那么item结构在内存中存在两次?
【问题讨论】:
-
是的,就像
int a = b一样,b的值会在内存中存在两次。 -
不要将
malloc和朋友的结果投射到C中。
标签: c arrays pointers struct dynamic-memory-allocation