C 数组内存泄漏

标签 c memory valgrind memory-leaks

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

然而,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/

相关文章:

c - 从批处理文件中获取击键

C++ 读取内存地址/指针和偏移量

c - Valgrind:libmysql 示例程序出现 'still reachable:' 泄漏

调试由 valgrind 生成的内核

C:从不兼容的指针类型赋值[默认启用]

c - 快速排序算法在一些迭代后就地崩溃

c - 由输入定义的变量

c# - C#中的内存布局优化

c++ - 查找地址属于哪个堆?

c - 为什么会出现段错误?有人可以解释 valgrind 错误吗?