原则:尽量不要返回一个局部变量的指针或引用,因为函数执行完之后,将释放分配给局部变量的存储空间,局部变量只是临时的存储空间,此时,对局部变量的引用和地址就会返回不确定的内存,但可以返回局部变量本身,局部变量实际上是返回变量值的拷贝,虽然在函数调用结束后所在内存会被释放回收掉,但返回值不是地址,而是局部变量的...
局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。 因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会...
函数完成只释放局部变量本身占用的空间,如果变量是指针变量,则不会释放指针指向的空间
那么是需要后续释放的。不存在问题中“不需要释放内存”这种假设。
结论:局部变量使用动态内存管理申请的空间,如果在其他函数中需要使用大该空间,可以不直接释放该局部变量,等到使用完后在利用指向该空间的地址的指针进行释放。例如:这列的str可以不直接使用str进行释放,使用完后利用指针p进行释放。 笔试资料领取处jq.qq.com/?_wv=1027&k=nJ302A0L 为了帮助大家,轻松,高效学习...
由上面的函数原型可以看出free函数需要一个形参,且形参的类型是一个指针。free 函数无返回值,它的功能是释放指针变量 p 所指向的内存单元。此时 p 所指向的那块内存单元将会被释放并还给操作系统,不再归它使用。操作系统可以重新将它分配给其他变量使用。
静态局部变量(static) 使用static来声明局部变量,那么就可以将局部变量指定为静态局部变量。 static的局部变量具有静态存储期,所以它的生存期与全局变量一样,直到程序结束才释放。 外部变量(extern) extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定...
// 定义一个函数,返回局部变量的地址int*fn(){int i=10;return&i;}intmain(){// 对fn函数返回的指针进行解引用printf("%d",*fn());return0;} 以上示例会报错退出,显然的,我们是不能返回一个局部变量的地址的,局部变量在函数调用结束会就会释放,因此在局部变量作用域之外去操作它的地址是非法操作。