函数里的局部变量在函数退出后会不会自动释放?

如果是指针呢?
void ClassA::method(){
ClassB *b = new ClassB();
}

当method()退出时b指向的空间会自动释放?

会自动释放,指针也是一样的。

局部变量的作用域是定义该变量的函数或定义该变量的复合语句。只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。

扩展资料:

局部变量的作用域说明:

1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。

2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不干扰。

3、形式参数是属于被调函数的局部变量。例如上面f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。

4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。

参考资料来源:百度百科-局部变量

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-03
  局部变量肯定会释放,一般由内核在栈上释放,假如在函数里申请了,就得记得,那个申请到的地址释放后,指向的指针会成野指针。

关于局部变量里的函数:
  在C语言中在函数里面定义的局部变量确实会在函数结束之后被释放掉,
例如:
  void print()
  {int a=0;
  printf("%d",a);}
  当函数调用完之后a所占用的内存控件就被释放掉了,实际上局部变量的存储空间都是放在栈上面的,当函数返回之后,关于此函数的栈数据都被弹出,函数内部的局部变量占用的内存空间也被释放。但是你通过malloc函数分配的内存空间并不是在栈上,而是在另一个特殊的区域,也就是堆,堆中分配的内存是不能自动被释放的,必须要程序员手动释放,在c中提供了free函数对malloc分配的内存空间进行释放,如果不释放就会造成内存泄漏。
  不知道有没有面向对象语言的基础,例如C#,Java,C++。在C#和Java中都提供了一种叫垃圾回收器的机制,可以自动回收堆内存,而不需要程序员手动释放,这给了程序员极大的方便,也极大的避免了C和C++中的内存泄漏的问题。在C++中对象的创建如果是通过new关键字来创建的,那么对象使用完成之后必须通过delete关键字进行释放内存控件。因为实际上new关键字将对象分配在堆内存。
第2个回答  推荐于2017-09-27
这里有两个概念:指针变量本身;它所指向的内存区域。
函数退出后,指针变量本身(4个字节,一般在栈上)会被释放,但它所指向的内存区域不会被释放。
楼主的例子里,如果在method()里不释放b指向的空间,那么当method()退出时,b指向的空间不会被自动释放,而b这个指针变量不再存在了。这样一来b指向的空间就永远地泄漏了,因为再也没有指针指向它,你永远找不到它了。
如果出于某种原因不想在method里释放这块空间,可以在method()里把b的值赋给一个全局指针变量,以后再释放这个全局变量。本回答被提问者采纳

函数里的局部变量在函数退出后会不会自动释放?
会自动释放,指针也是一样的。局部变量的作用域是定义该变量的函数或定义该变量的复合语句。只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。

全局变量和局部变量有什么区别
它们的生命周期也有所不同。全局变量随主程序的启动与结束而存在,其生命期不受函数调用的影响。相比之下,局部变量仅在函数执行期间可见,函数执行完毕后,局部变量也随之消失。在使用方式上,全局变量可在程序的任意部分被访问和修改,而局部变量仅限于其定义的函数内部使用。操作系统和编译器通过内存分配...

c语言初学者,不是说局部变量会在函数结束时被释放吗,为什么这个程序没有...
你是怎么理解“释放”的?释放了那几个存储单元就不存在了?你的代码只说明函数f退出后,存放100和12的那8个内存单元暂时还没有被别的代码使用而已,并不能断定“没有被释放”。释放的意思是那几个存储单元不再由你的代码“霸占”了,而并不是“消失”了……

全局变量和局部变量的本质区别
3、生命期不同,全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了。全局变量:所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件,包括.c和.h文件。局部变量:定义在函数体内部的变量,作用域仅限于函数体内部。

C语言问题:内存的分配方式有哪几种?
例如全局变量、静态变量等。2、栈上分配 在函数执行时,函数内的局部变量的存储单元在栈上创建,函数执行结束时这些存储单元自动释放。3、堆上分配 堆分配(又称动态内存分配)。程序在运行时用malloc或者new申请内存,程序员自己用free或者delete释放,动态内存的生存期由我们自己决定。

C语言局部变量问题?
局部变量的话,一般的定义就在局部里,如哪个函数内部,所以,每调用的时候都会先给它赋初值,分配内存再执行,等执行完毕,变量的内存将释放,那个局部变量自然就又不知道是多少去了,当你没有给变量赋初值的时候,那个初值是随机错误的一个数,所以一般在使用之前一定要先初始化。不然会出现不明的错误...

局部变量和全局变量的区别 局部变量和全局变量的区别是什么
关于全局变量的说明 1、全局变量从程序运行起即占据内存,在程序整个运行过程中可随时访问,程序退出时释放内存。与之对应的局部变量在进入语句块时获得内存,仅能由语句块内的语句访问,退出语句块时释放内存,不再有效。2、全局变量在程序员不指定初值的情况下自动初始化为零。3、在同一源文件中,允许...

c语言指针指向的局部变量释放?
函数完成只释放局部变量本身占用的空间,如果变量是指针变量,则不会释放指针指向的空间

全局变量和静态局部变量有什么区别
静态局部变量在函数调用结束后不自动释放,保留函数调用结束后的值;全局变量:在函数外定义的变量称为全局变量;全局变量在静态存储区分配存储单元,在程序运行期间都不释放,在文件中的函数均可调用该全局变量,其他文件内的函数调用全局变量,需加extern声明;静态全局变量:在函数外定义变量时,若加上...

关于c语言函数,函数里的数组在函数结束后是不是就释放了?
line数组会在函数执行结束后释放,因为它属于函数里的局部变量。所谓的释放不是说这个数组已经消失得无影无踪,而是说它现在所占据的空间可以由其他数据再次使用(即覆盖),我们不要再去访问这个line数组了,因为它的内容随时可变。

相似回答