C/C++返回内部静态成员的陷阱[VC/C++编程]
本文“C/C++返回内部静态成员的陷阱[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
后台
在我们用C/C++开辟的历程中,老是有一个问题会给我们带来苦恼.这个问题就是函数内和函数外代码需求通过一块内存来交互(比方,函数返回字符串),这个问题困扰和很多开辟人员.假如你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存.
这是一个让无数人困扰的问题.假如你一不当心,你就很有大概在这个上面出错误.当然目前有很多办理办法,假如你熟习一些尺度库的话,你可以看到很多形形色色的办理办法.大体来说有下面几种:
1)在函数内部通过malloc或new在堆上分配内存,然后把这块内存返回(因为在堆上分配的内存是全局可见的).这样带来的问题就是潜在的内存问题.因为,假如返回出去的内存不释放,那么就是memory Leak.大概是被多次释放,从而造成程序的crash.这两个问题都相当的严重,所以这种计划办法并不举荐.(在一些Windows API中,当你调用了一些API后,你必须也要调用他的某些API来释放这块内存)
2)让用户传入一块他自己的内存地址,而在函数中把要返回的内存放到这块内存中.这是一个目前广泛利用的方法.很多Windows API函数或是尺度C函数都需求你传入一个buffer和这个buffer的长度.这种方法对我们来说应当是层出不穷了.这种方法的好处就是由函数外部的程序来保护这块内存,对比简显直观.但问题就是在利用上稍许有些麻烦.不过这种方法把出错误的机率减到了最低.
3)第三种方法显得对比另类,他操纵了static的特点,static的栈内存一旦分配,那这块内存不会随着函数的返回而释放,并且,它是全局可见的(只要你有这块内存的地址).所以,有一些函数利用了static的这个特点,即不用利用堆上的内存,也不需求用户传入一个buffer和其长度.从而,利用得自己的函数长得很漂亮,也很简单利用.
以上是“C/C++返回内部静态成员的陷阱[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |