gpt4 book ai didi

C 数组内存泄漏

转载 作者:行者123 更新时间:2023-11-30 18:20:44 24 4
gpt4 key购买 nike

我有一个简单的程序,只需用数字填充一个数组并打印每个数字。

然而,valgrind 声称至少有 8000 字节的内存泄漏。

int main(int argc, char *argv[])
{
int numbers[10];
int i = 0;
for(i = 0; i < 10; i++)
{
numbers[i] = i;
printf("%d",numbers[i]);
}
free(numbers);
return EXIT_SUCCESS;
}

谁能解释一下内存泄漏在哪里吗?

这是释放为数组分配的空间的正确方法吗?

最佳答案

不存在内存泄漏,不存在未定义的行为。您正在释放尚未分配的内存,从而导致问题。

您只需对已使用 malloccallocrealloc 分配的内存调用 free 。在任何其他内存位置调用free都是未定义的行为。在您的情况下,numbers 分配在自动内存(也称为“堆栈”)中。一旦超出范围,该内存就会自动释放。

有两种方法可以修复您的程序:

  • int numbers[10]; 替换为 int *numbers = malloc(10*sizeof(int));,或
  • 删除free(numbers);

关于C 数组内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418731/

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