【发布时间】:2012-08-24 11:17:57
【问题描述】:
刚开始学习C,遇到如下问题:
我需要在 C 中缩小一个整数数组,最后删除元素。通过删除我的意思是释放。常见的答案是为较小的数组分配新内存,然后将原始数组的所有项( -items to remove )复制到新分配的内存中,然后 free() 原始数组。
因为我必须处理非常个大数组,所以我宁愿跳过复制部分。
是否可以创建一个指针变量,指向“接近原始数组的末尾”,大小为“数组末尾 - 接近末尾”,然后释放该指针?
提前致谢
【问题讨论】:
-
您可以使用
realloc进行缩小。不能保证,但某些实现实际上会返回您传递的原始指针,而无需复制任何内容。 -
你考虑过使用
realloc吗? -
realloc 是否也会释放最后丢弃的任何元素?我不知道如何测试...顺便感谢您的快速响应!
-
它会将分配空间的大小调整为您告诉它的任何大小(更大或更小),我将在下面提供一个示例。
-
要回答您的部分问题,
free()不可能通过传递“接近末尾”的指针来释放部分内存块。这几乎肯定会导致崩溃或堆损坏。