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)
任何人都可以解释内存泄漏的位置吗?
这是为阵列释放空间的正确方法吗?
没有内存泄漏,存在未定义的行为.您正在释放尚未分配的内存,从而导致出现问题.
你需要调用free仅在已分配内存malloc,calloc或realloc.调用free任何其他内存位置是未定义的行为.在您的情况下,numbers被分配在自动存储器中(也称为"堆栈").一旦超出范围,该内存就会自动解除分配.
有两种方法可以修复您的程序:
int numbers[10];为int *numbers = malloc(10*sizeof(int));,或free(numbers);