函数完成只释放局部变量本身占用的空间,如果变量是指针变量,则不会释放指针指向的空间
原则:尽量不要返回一个局部变量的指针或引用,因为函数执行完之后,将释放分配给局部变量的存储空间,局部变量只是临时的存储空间,此时,对局部变量的引用和地址就会返回不确定的内存,但可以返回局部变量本身,局部变量实际上是返回变量值的拷贝,虽然在函数调用结束后所在内存会被释放回收掉,但返回值不是地址,而是局部变量的...
那么是需要后续释放的。不存在问题中“不需要释放内存”这种假设。
局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。 因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会...
刚好满足我们的要求,既对动态开辟的内存进行了释放也满足了我们的使用需求。 结论:局部变量使用动态内存管理申请的空间,如果在其他函数中需要使用大该空间,可以不直接释放该局部变量,等到使用完后在利用指向该空间的地址的指针进行释放。例如:这列的str可以不直接使用str进行释放,使用完后利用指针p进行释放。 笔试资料...
想必大家都知道C语言中动态开辟内存之后,必须要释放内存,来防止内存泄露。也就是malloc之后,必须要free。正所谓”有借有还,再借不难”, 不少同学会问为什么释放指针后,指向这块内存的指针的值不变呢,我们今天为大家揭秘。 首先,我们用malloc开辟一个内存,用strcpy拷贝一串字符串,然后释放掉,通过断点调试进行观察!
如果想通过指针找到这个变量,还要用到 * 这个操作符,在这里它叫做解引用操作符。 举个例子: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 #include<stdio.h>intmain(){int num=10;int*p=#*p=20;printf("%d\n",num);return0;} ...
由上面的函数原型可以看出free函数需要一个形参,且形参的类型是一个指针。free 函数无返回值,它的功能是释放指针变量 p 所指向的内存单元。此时 p 所指向的那块内存单元将会被释放并还给操作系统,不再归它使用。操作系统可以重新将它分配给其他变量使用。