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

c语言结束时释放所有内存

  • 内存
  • 2024-08-11 07:14:17
  • 4317

一、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函数会改变这些。再次房间,留下不同的垃圾值
如果在定义数组之前加上static关键字,结果会不一样
staticinta[5]={...};
不信的话,就试试吧!