收缩数组C

Joe*_*een 10 c arrays trim shrink

刚刚开始学习C并遇到了以下问题:

我需要缩小C中的整数数组,最后删除元素.通过删除我的意思是释放.常见的答案是为较小的数组分配新的内存,然后将原始数组的所有项(-items to remove)复制到新分配的内存中,然后free()原始数组.

因为我必须处理非常大的数组,所以我宁愿跳过复制部分.

是否有可能创建一个指向"接近原始数组末尾"的指针变量,其大小为"数组末尾 - 接近结尾",然后释放该指针?

提前致谢

Sir*_*ius 5

C标准库中的realloc函数可能就是您想要的.

在您的情况下,它可能不执行任何复制操作,因为内存管理器没有理由分配新的内存区域.只有旧旧大小之间的差异可能被系统回收为可用内存.

如果您使阵列变大,则会发生复制,因为malloc和朋友不保证"当前"区域之后的内存实际上是空闲的.如果是,那就没关系,当前的内存分配将会扩展.如果没有,则需要找到更大的可用内存区域,并且可以在内存中的任何位置分配它.