十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
区分内存类型,有不同结果:
创新互联主营临颍网站建设的网络公司,主营网站建设方案,重庆APP开发公司,临颍h5重庆小程序开发搭建,临颍网站营销推广欢迎临颍等地区企业咨询
1
局部变量。
即在函数内部定义的变量,且变量不带static修饰。这时,在退出函数后,变量自带内存会自动释放。
2
静态变量。
函数内部定义的带static修饰的变量为静态变量,这种变量在函数退出后不会释放内存,直到程序退出时一起释放。
3
动态分配内存。
指通过malloc,calloc,zalloc等函数申请的内存空间,这类空间在退出函数后不会自动释放,要释放只有通过free函数的调用,进行内存释放。
line数组会在函数执行结束后释放,因为它属于函数里的局部变量。
所谓的释放不是说这个数组已经消失得无影无踪,而是说它现在所占据的空间可以由其他数据再次使用(即覆盖),我们不要再去访问这个line数组了,因为它的内容随时可变。
只要访问过p指针,都会变化(连续printf两次,结果不一样)
f函数结束,p指向地址已经释放,但是该内存单元依然存有原来的数据,我个人认为,访问p之后,由于一些系统内部操作,导致p指向内存单元被回收,内部机制不清楚,纯属个人猜测
变量用delete释放,数组用delete[]释放,指针的类型不能改变。对于一些简单的情况(所有成员都是基本数据类型,没有析构函数),可以直接用delete释放。
例:
structNODE
{
intidata;
doubleddata;
}node[100];
//释放空间
delete[]node;
//所有的数组类型释放空间都这样写
扩展资料
C语言数组
数组的声明并不是声明一个个单独的变量,比如number0、number1、...、number99,而是声明一个数组变量,比如numbers,然后使用numbers[0]、numbers[1]、...、numbers[99]来代表一个个单独的变量。数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
一时看不明白你的代码。一个原则是,start指向了谁。如果指向了在这个函数中定义的临时自动型数组,那必然存在返回局部数组指针的问题,就是你说的内存释放问题。这样虽然指针被返回了,但它指向的内容已经不受代码控制了,很危险。但如果start指向的是在主函数中声明的数组,或是全局或静态数组(这个函数中定义的静态数组也行),或者是用动态分配法获得的内存空间且未曾释放,则不存在任何问题,是完全合理合法的。用动态分配法时要注意在不用时释放内存空间,以免造成内存泄漏。