当前位置:首页 > 内存 > 正文

释放内存命令c语言(c语言释放内存空间)

  • 内存
  • 2024-07-30 04:41:43
  • 3602

一、C语言静态内存释放的问题,请大神指教首先,这个数组不是静态数组,因为你没有输入static关键字!
所以这个数组是一个本地数组,在进入函数时创建,在函数退出时销毁。
编译此程序时通常会出现警告-您返回了未记录数组的起始地址。
例如:你在酒店开了5个房间,用第一个房间的房间号作为函数值。
当功能结束后,你查看了房间,但房间号(即地址)还在,但房间不再属于你了。
如果没有新人入住,里面的内容不会改变。当新人入住时,里面的内容就会发生变化。
直接看第二个程序:
1)pArr=staticArr();
2)printf("%d\n",*(pArr+1));
3)printf("%d\n",*(pArr+2));
第1行:pArr获取取消数组的起始地址。
第2行:在调用printf函数之前,首先通过*(pArr+1)获取空数组第一个元素的值,由于该空间还没有被新人占用,所以原来的值可能已经是获得。然后将此值传递给printf函数。请注意,它被复制然后传递给printf函数。
注意:所有函数调用时给出的实参都会被复制到被调用函数的形参中——也就是说,函数的形参都是副本。
现在调用printf函数——新人已经搬进来,数组中的空间现在分配给printf函数,并且内容发生变化,但是printf函数输出的是副本,而不是原始的,所以“它
第3行:当通过*(pArr+2)再次获取值时,得到的是前面printf函数修改后留下的垃圾值,而这个printf函数会再次修改这些空格。,并留下另一个垃圾值。
用任何方法输出这个不再属于你的数组的内容都是没有意义的,因为它都是上一个printf-函数完成后留下的垃圾数据
如果在数组定义之前添加static关键字,结果将会不同。
staticinta[5]={...};
如果不这样做不信,就试试吧!


二、c语言释放内存的问题释放的空间是指使用“应用动态内存功能”成功申请的空间,而不是您编写的代码占用的空间。你所编写的代码的可执行文件所占用的空间,直到程序完全退出后才会自动释放。动态申请的空间在使用后可以使用相应的“释放函数”释放,以避免所谓的“内存泄漏”——即内存空间被使用而程序无法再运行。如果只申请而不释放,积累过多就会出现内存泄漏;如果请求的空间较少,则不一定会发生泄漏,并且会在程序结束时自动释放。但当您编写合格的程序时,您就不能指望这一点。正确的做法是“申请——成功后使用——使用后按时发布”。