【发布时间】:2016-05-25 12:33:08
【问题描述】:
假设我初始化一个包含 5 个整数元素的数组,如下所示:
int *Q = malloc(sizeof(int) * 5);
for (int i = 0; i < 5; i++) {
Q[i] = i;
}
数组看起来像:{0, 1, 2, 3, 4}。 现在,如果我将所有内容移动 1 个位置:
Q++;
数组看起来像:{1, 2, 3, 4, #},其中 # 是一些垃圾值。
有没有办法释放最终元素,使其不存储在数组中?
我试过了:
free(Q[4]);
但我知道这行不通,因为 free() 只能操作为 Q 分配的整个内存块。
有没有更好的方法来转移所有内容?结果数组应如下所示:{1, 2, 3, 4}。
每次轮班后重新分配 Q 会是个好主意吗?
【问题讨论】:
-
是的,如果你这样做
Q++,那么调整size--。你有一大块内存,你可以控制你如何访问它。 -
Q++之后,Q[4]不包含“垃圾”。访问它是未定义。 -
你可以使用realloc。
-
如果它只是一个元素,它是否值得工作是值得怀疑的,你很可能不会通过这样做在现实中释放任何内存。
-
您可能应该提供更多上下文。这听起来像是一个 XY 问题 (meta.stackexchange.com/questions/66377/what-is-the-xy-problem),您真正想做什么?