【问题标题】:Calling malloc multiple times [closed]多次调用 malloc [关闭]
【发布时间】:2017-05-05 20:21:21
【问题描述】:

对同一个变量多次调用 malloc() 会发生什么?我应该如何释放以前分配的内存?我打算使用 struct iovec 来存储数据(以便以后可以发送/写入这些块)。在调用每个 malloc 之前,我想保存对 iovec 数组的当前引用。完成此操作后,我将对同一变量调用 malloc 以获取固定大小的新内存块。用完后,我将它保存在iovec数组中并再次调用malloc等等。我可以稍后释放 iovec 阵列吗?请让我知道这是否是正确的方法或建议任何更好的替代方法?

【问题讨论】:

  • 你能用realloc代替吗?我们需要查看一些代码以帮助您
  • 请发布您的代码,很难说出您的意思。您可以创建一个指针数组,并将每个分配保存在一个数组元素中。然后你可以稍后循环遍历数组并释放它们。
  • @RoiHatam:我不想调用 realloc。因为在这种情况下,这似乎是非常昂贵的操作。
  • 你不能在“同一个变量”上调用malloc。您可以将其结果分配给同一个变量。
  • @EugeneSh。 : 在我对同一个变量调用 malloc 之前,我会将引用保存在某个数组中。

标签: c arrays pointers memory-management malloc


【解决方案1】:

根据您的描述,听起来您正在执行以下操作:

var = malloc( sizeof *var );
do_something_with( var );
vec[i++] = var;
var = malloc( sizeof *var );

如果这是真的,那么这没关系(模数错误和完整性检查) - 您在覆盖 var 之前保存对先前分配的内存的引用。完成后,您将循环通过 vecfree 每个元素:

while ( i > 0 )
  free( vec[--i] );

如果你正在做类似的事情:

var = malloc( sizeof *var );
do_something_with( var );
var = malloc( sizeof *var );

那么你有一个问题 - 你破坏了对先前分配的内存的唯一引用,使你无法访问或free 它,导致内存泄漏。

【讨论】:

  • 感谢您的及时回复。我的做法与第一种方法非常相似。我正在分配固定长度的缓冲区。填满后,保存此引用并再次执行 malloc()。
  • @mehtame026:那你应该没事。
  • 谢谢@John..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多