我有一个简单的程序,只需用数字填充一个数组并打印每个数字。
然而,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;
}
谁能解释一下内存泄漏在哪里吗?
这是释放为数组分配的空间的正确方法吗?
最佳答案
不存在内存泄漏,不存在未定义的行为。您正在释放尚未分配的内存,从而导致问题。
您只需对已使用 malloc
、calloc
或 realloc
分配的内存调用 free
。在任何其他内存位置调用free
都是未定义的行为。在您的情况下,numbers
分配在自动内存(也称为“堆栈”)中。一旦超出范围,该内存就会自动释放。
有两种方法可以修复您的程序:
- 将
int numbers[10];
替换为int *numbers = malloc(10*sizeof(int));
,或 - 删除
free(numbers);
关于C 数组内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418731/