C阵列泄漏内存

时间:2013-01-19 20:50:49

标签: 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;
}

任何人都可以解释内存泄漏的位置吗?

这是为阵列释放空间的正确方法吗?

2 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:0)

0123456789检查内存泄漏...

实际泄漏报告(实际泄漏:0总大小:0字节)

可能的泄漏报告(可能的泄漏:0总大小:0字节)

执行完成,退出代码为0

这是内存检查报告。没有记忆泄漏。此外,只有在手动分配内存时才应使用free,否则不应使用free。