C阵列泄漏内存

nop*_*ope -1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

das*_*ght 7

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

你需要调用free仅在已分配内存malloc,callocrealloc.调用free任何其他内存位置是未定义的行为.在您的情况下,numbers被分配在自动存储器中(也称为"堆栈").一旦超出范围,该内存就会自动解除分配.

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

  • 替换int numbers[10];int *numbers = malloc(10*sizeof(int));,或
  • 去掉 free(numbers);