多次调用malloc

时间:2017-05-05 20:21:21

标签: c arrays pointers memory-management malloc

在同一个变量上多次调用malloc()会发生什么?我该如何释放以前分配的内存?我打算使用struct iovec来存储数据(以便我以后可以发送/写入这些块)。在调用每个malloc之前,我想保存当前对iovec数组的引用。执行此操作后,我将在同一个变量上调用malloc以获取固定大小的新内存块。在它耗尽之后,我将它保存在iovec数组中并再次调用malloc,依此类推。我以后可以免费使用iovec数组吗?如果这是正确的方法或建议任何更好的替代方式,请告诉我?

1 个答案:

答案 0 :(得分:2)

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

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它,导致内存泄漏。