警告:returning pointer to local variable

来源:互联网 发布:淘宝模特红人男 编辑:程序博客网 时间:2024/05/21 11:07

按理来说,在函数内部设置的局部变量应该是会在函数结束时被释放掉的,然而当把该指向该变量的指针返回的时候,指针所指的值并没有改变。那么这样究竟算不算对呢?函数结束后释放的究竟是什么呢?仅仅是设置的局部变量不存在了,然而内存中已经存下的值并没有改变,这样理解对吗?

然而既然编译器抛出一个警告,好言相劝,让我不要返回局部变量的值指针,我还是不要任性地不知好歹踩雷了。

关于为什么单步调试在函数结束之后,返回指针所指的变量值并没有变,我的理解是因为,在调试之后,该部分的内存虽然已经被系统收回,但是还有经历其他任何操作,所以值还是原来的值。也就是说我付不起房租被赶走之后,小屋就已经不属于我了,隔天我在窗口看看,里面可能还摆着我曾经的东西,但是隔月时候就不一定归谁住,摆着谁的东西了。所以说,最(qian)好(wan)不(bu)要(neng)从函数中返回局部变量的地址。(你如果用静态变量那另说...)那么问题来了,需要函数返回一个变量的时候怎样操作呢?

其实在上上周,陈老师跟我交代怎么写接口函数时,就说过了,函数的返回值是true/false,但是输出值并不是,在输入参数中应该传进去一个地址,用来存放处理之后的数据。我当时的想法是,我已经写好的所采用的办法是,直接返回指向输出数据变量的指针,并且自作聪明地在函数中使用malloc来防止内存被收回。这样子,如果我的函数返回的是对应数据类型的变量指针则表示操作完成,如果是NULL就是操作失败,这样不比专门返回true/false更方便吗?知道老师要求保证函数可重入的时候我才开始觉得自己的方法真是大大地欠妥啊!这才体会到之前老师强调的那种方法的深意,并不是为了假惺惺地让程序告诉我true了,还是false了,而是在函数外部已经申请好了内存空间,作用于不仅仅在函数之内。这相当于准备好了纸笔,让函数来写,写完了纸笔还是我的,别人并不能随便拿走,保证我能看到上面写了什么。

所以说,还是图样图森破的孩纸,还是得虚心学习啊!

0 0