我有一个简单的程序,只需用数字填充数组并打印每个数字。
但是,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;
}
任何人都可以解释内存泄漏的位置吗?
这是为阵列释放空间的正确方法吗?
答案 0 :(得分:7)
没有内存泄漏,存在未定义的行为。您正在释放尚未分配的内存,从而导致出现问题。
您只需在已使用free
,malloc
或calloc
分配的内存上调用realloc
。在任何其他内存位置调用free
是未定义的行为。在您的情况下,numbers
被分配在自动存储器中(也称为“堆栈”)。一旦超出范围,该内存就会自动解除分配。
有两种方法可以修复你的程序:
int numbers[10];
替换为int *numbers = malloc(10*sizeof(int));
或free(numbers);
答案 1 :(得分:0)
0123456789检查内存泄漏...
实际泄漏报告(实际泄漏:0总大小:0字节)
可能的泄漏报告(可能的泄漏:0总大小:0字节)
执行完成,退出代码为0
这是内存检查报告。没有记忆泄漏。此外,只有在手动分配内存时才应使用free,否则不应使用free。