C语言 调用函数完后释放内存吗?

来源:百度知道 编辑:UC知道 时间:2024/09/22 05:13:54
刚学,遇到问题了。
学到函数时,好像有这么一句:被调用函数使用完后,调用函数的变量会释放内存。所以我就想验证一下(通过查看变量指针地址),但不知道是什么原因指针地址一直不变。
#include<stdio.h>
int * k()
{
int a=10;
int * ip;
ip=&a;
return ip;
}
void main()
{
for(;;)
{
printf("%d",k());
getchar();
}
}

问:
1.可以这样验证吗?
2.是不是变量地址本来就是固定的?
3.别人说是:变量不可能被释放,要c++里才有相应的函数才会释放。是真的吗?

区分内存类型,有不同结果:
1 局部变量。
即在函数内部定义的变量,且变量不带static修饰。这时,在退出函数后,变量自带内存会自动释放。
2 静态变量。
函数内部定义的带static修饰的变量为静态变量,这种变量在函数退出后不会释放内存,直到程序退出时一起释放。
3 动态分配内存。
指通过malloc,calloc,zalloc等函数申请的内存空间,这类空间在退出函数后不会自动释放,要释放只有通过free函数的调用,进行内存释放。

1.不可以,释放内存不是指内存地址没了,地址还是那个地址,只不过这个地址里面的数据可以被随意更改了,不确定了。
2.它都是从一个固定的内存区域里分配的,所以在你不干其它事情时,这个内存地址不会变。
3.变量会被释放,但是你申请的内存不会被释放,不管C\C++都是这样。

肯定会释放了,函数调用完成后,函数里的所有局部变量将会被释放。但是你写的这个程序根本就有问题。你所返回的只是一个地址空间,所以一直没变,释放指的是将这个地址里的内容清除掉,以便使其它的数据可以用这个地址的内存。如果没释放的话,其它的数据就用不了这个址址了。
c的内存泄露主要是出在指针上面。对于变量,系统都会在用完后自动释放的。

你在你的for循环中多谢几条语句就会有不一样的了。