当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 操纵 .htaccess 启用 gzip 压缩静态内容
  • 高配置机械在CC攻击需求做的调整
  • Ubuntu proc gcc典型问题
  • Ubuntu 10.10安装低版本gcc和g++编译器
  • Windows2003下配置 Apache2.2 + MySQL 5 + php5 + ZendOptimizer3.3 + .htaccess重写
  • LNMP上进级布置PHP加快器eAccelerator
  • 在Access2007"快速拜候工具栏"增添更多号令
  • Access2007表的数据表视图和计划视图
  • access violation at address的问题
  • VB用Access数据库成立用户登录
  • Web服务器若何防CC攻击
  • Asp 防备CC攻击模块 (Anti-CC.asp)
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .