当我有一个函数,得到一个指针int *vector
与几个int
值。我想删除元素编号n
。所以我会在该元素上使用free()
。现在的问题是我的int值数组中有一个“洞”。有没有一种简单的方法,我没有这个问题,或者我真的不得不做一个新的int pinter和重新排序我的向量?简单的方法来处理一个数组中的空闲
-1
A
回答
1
鉴于这种形式的函数:
void delete_element(int *vector, size_t index) {
// ...
}
对应于vector
实际参数预计是一个指针,指向一系列的一个或多个(暗示:index + 1
或更多个)连续int
秒。这可能是普通int
数组的一部分或全部,也可能是动态分配的数据块。如果前者,那么你根本无法释放任何部分的空间。如果是后者,那么你可以释放或重新分配整个空间,但不只是与一个元素相关的部分。
为了避免删除在数组中留下空洞,您需要将后面的元素向下移动,为此,您需要知道总共有多少个元素。因此,你需要更翔实的函数签名,或许是这样的:
void delete_element(int *vector, size_t *size, size_t index) {
// ...
}
实际删除可能涉及简单地使用memmove()
移动后面的元素(覆盖要删除的一个),然后递减的大小。关于后者,请注意,我建议将指针传递给向量大小,以便该函数可以修改调用者的副本。
如果您还想缩小分配范围,那么您需要做更多的工作(涉及调用realloc()
,并将修改后的值vector
传回给调用者),但请注意,在这种情况下,您的函数将不起作用在普通阵列上。
0
无法释放()malloc()返回的块的一部分。如果要删除记录[n],则需要将记录[n + 1] ... record [last]复制到数组中。
如果你确实需要释放()每个元素,你必须首先malloc()每个元素。
相关问题
- 1. 有一个更简单的方法来处理数组!
- 2. 在Scala Actor中做空闲处理的最简单方法是什么?
- 3. 有一种简单的方法来处理BJ并发性
- 4. 方法来处理LINQ组
- 5. 简单的方法来管理package.json
- 6. 简单的方法来获取数据库的行成一个关联数组
- 7. 最简单的方法来追加一对PHP数组
- 8. 简单的方法来管理java中的数据
- 9. 简单的方法来处理嵌套事务
- 10. 更简单的方法来编辑数组数组?
- 11. 简单的方法来压扁这个数组?
- 12. 简单的方法来合并二维数组中的行
- 13. 最简单的方法来移动一个签名的数字
- 14. 有没有一种简单的方法来处理iPhone开发的Web服务?
- 15. 在c#中处理关联数组的最简单方法是什么?
- 16. 有没有简单的方法来创建一个初始化的数组?
- 17. 简单的数据处理
- 18. 简单的方法来改变结构中的一个字段?
- 19. 有没有更简单的方法来处理来自tfrecords的批量输入?
- 20. 简单的方法来创建一个SQLite数据库?
- 21. 有史以来第一个简单的批处理文件
- 22. 简单的方法来写这个?
- 23. 一个简单的方法来连载一个double?
- 24. 最简单的方法来消除SELECT DISTINCT中的空值?
- 25. iOS中的空闲线程方法
- 26. 用数组声明一个微调器的简单方法
- 27. 简单的方法来获得复杂的数组值或null
- 28. 最简单的方法来更改所有数组的键?
- 29. 通过Web服务处理批量数据的简单方法?
- 30. 什么是一个简单的方法来保存一组数组到一个文件并返回到C++?
'vector [n]'是一个'int' ...你不能'释放()'那个。 – FatalError
您可以创建一个结构数组来创建一个假的int数组或链表。 –
'免费()'不会按照您的想法操作或工作 – bolov