Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次调用malloc_C_Arrays_Pointers_Memory Management_Malloc - Fatal编程技术网

多次调用malloc

多次调用malloc,c,arrays,pointers,memory-management,malloc,C,Arrays,Pointers,Memory Management,Malloc,在同一个变量上多次调用malloc()会发生什么?如何释放以前分配的内存?我计划使用struct iovec来存储数据(以便以后可以发送/写入这些数据块)。在调用每个malloc之前,我想保存对iovec数组的当前引用。完成此操作后,我将调用同一变量上的malloc以获得固定大小的新内存块。在它耗尽之后,我将它保存在iovec数组中,并再次调用malloc,以此类推。我可以稍后释放iovec阵列吗?请让我知道这是否是正确的方法,或者建议更好的替代方法 根据你的描述,听起来你在做以下事情: var

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

根据你的描述,听起来你在做以下事情:

var = malloc( sizeof *var );
do_something_with( var );
vec[i++] = var;
var = malloc( sizeof *var );
如果这是真的,那么这是正常的(模错误和健全性检查)-在覆盖
var
之前,您正在保存对先前分配内存的引用。完成后,您将通过
vec
循环到
free
每个元素:

while ( i > 0 )
  free( vec[--i] );
如果您正在执行以下操作:

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

然后您就有了一个问题-您已经删除了对以前分配的内存的唯一引用,使您无法访问或
释放它,从而导致内存泄漏

您可以改用
realloc
吗?。我们需要看一些代码以帮助您。请发布您的代码,很难说您的意思。您可以创建一个指针数组,并将每个分配保存在一个数组元素中。然后您可以稍后在数组上循环并释放它们。@RoiHatam:我不想调用realloc。因为在这种情况下,这似乎是非常昂贵的操作。您不能对“同一变量”调用
malloc
。您可以将其结果赋给同一个变量。@EugeneSh:在对同一个变量调用malloc之前,我将把引用保存在某个数组中。感谢您的及时回复。我做的和第一种方法非常相似。我正在分配固定长度的缓冲区。一旦它满了,保存这个引用并再次执行malloc()。@mehtame026:那么你应该没事了。谢谢@John。。