gpt4 book ai didi

c - 那段代码会不会泄漏内存?

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:35 25 4
gpt4 key购买 nike

今天看到一些我认为会泄漏内存的代码:

/* realloc example: rememb-o-matic */
#include <stdio.h> /* printf, scanf, puts */
#include <stdlib.h> /* realloc, free, exit, NULL */

int main ()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;

do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", &input);
count++;

more_numbers = (int*) realloc (numbers, count * sizeof(int));

if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while (input!=0);

printf ("Numbers entered: ");
for (n=0;n<count;n++) printf ("%d ",numbers[n]);
free (numbers);

return 0;
}

我认为程序未能在为指针分配新值之前释放指针 numbers 引用的所有内存。该程序仅在循环的最后一次迭代期间释放 numbers 指向的内存。

最佳答案

下面的事情都是由realloc()函数完成的。

  1. 已分配内存的先前内容被复制到新分配
  2. 先前的分配被传递给free()
  3. 返回新分配的地址。

注意:只有当 realloc() 函数能够实际执行新的内存分配时,才会发生上述情况。如果新内存分配失败,则返回 NULL

所以发布的代码没有内存泄漏,因为函数:realloc() 处理释放旧的内存分配。

关于c - 那段代码会不会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34341664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com