-1

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

然而,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;
}

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

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

4

2 回答 2

7

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

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

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

  • 替换int numbers[10];int *numbers = malloc(10*sizeof(int));, 或
  • 消除free(numbers);
于 2013-01-19T20:51:48.197 回答
1

0123456789检查内存泄漏...

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

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

执行完成,退出码为0

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

于 2014-02-07T09:44:50.117 回答