新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 在C++中使用C的一个malloc函数的疑惑[求助] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4375 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 在C++中使用C的一个malloc函数的疑惑[求助] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     rong9.13 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:15
      积分:247
      门派:XML.ORG.CN
      注册:2006/3/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给rong9.13发送一个短消息 把rong9.13加入好友 查看rong9.13的个人资料 搜索rong9.13在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看rong9.13的博客楼主
    发贴心情 在C++中使用C的一个malloc函数的疑惑[求助]

    疑惑一:
    用malloc()函数申请一个连续的空间存放数据类型为类的学生信息,
    能否把这个空间看作一个顺序表呢?(老师说不能混为一谈,我认为老师理解错了^^)

    疑惑二:
    在一个程序中使用了malloc()函数申请空间,就必须要将申请的空间释放吗?(如果要一直占有这个空间呢?)


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/24 20:36:00
     
     elfstone 帅哥哟,离线,有人找我吗?射手座1983-12-6
      
      
      等级:大四(总算啃完XML规范了)
      文章:185
      积分:1177
      门派:IEEE.ORG.CN
      注册:2006/2/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给elfstone发送一个短消息 把elfstone加入好友 查看elfstone的个人资料 搜索elfstone在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看elfstone的博客2
    发贴心情 

    以下是引用rong9.13在2006-3-24 20:36:00的发言:
    疑惑一:
    用malloc()函数申请一个连续的空间存放数据类型为类的学生信息,
    能否把这个空间看作一个顺序表呢?(老师说不能混为一谈,我认为老师理解错了^^)

    疑惑二:
    在一个程序中使用了malloc()函数申请空间,就必须要将申请的空间释放吗?(如果要一直占有这个空间呢?)


    1. malloc()是C语言中用于动态分配内存的函数,用它分配到的内存空间在逻辑上是连续的,但在物理上不一定是连续的,你们老师说得对,你搞混了。。。

    2. 不释放的话会造成空间资源的浪费,如果你的内存足够大,或者你的程序所要占用的内存空间不是很大,不释放也没什么关系。。。

    ----------------------------------------------
    Ich liebe erst meines Leben...

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/27 21:08:00
     
     enorm 帅哥哟,离线,有人找我吗?
      
      
      威望:4
      头衔:头衔
      等级:大三暑假(参加全国数模竞赛拿了一等奖)(版主)
      文章:144
      积分:854
      门派:Lilybbs.net
      注册:2005/12/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给enorm发送一个短消息 把enorm加入好友 查看enorm的个人资料 搜索enorm在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看enorm的博客3
    发贴心情 
    疑惑二:
    在一个程序中使用了malloc()函数申请空间,就必须要将申请的空间释放吗?(如果要一直占有这个空间呢?)


    最好在程序退出前释放一下,养成好习惯嘛,不释放也行操作系统会帮你的~~~~~~~~

    ----------------------------------------------
    天亮了

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/28 19:01:00
     
     firstway 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      等级:大三暑假(2个月背完了红宝书)(版主)
      文章:92
      积分:947
      门派:Lilybbs.net
      注册:2005/10/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给firstway发送一个短消息 把firstway加入好友 查看firstway的个人资料 搜索firstway在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看firstway的博客4
    发贴心情 
    关于问题2
    malloc()后如果一直在用这个内存当然不去释放
    问题就在不使用时也不去释放就会有问题
    如果是运行时间很长的服务器
    不停的malloc()而没有释放
    最后可能会使系统内存枯竭

    一般我们做些小东西,一点点内存泄漏可能看不出来
    但申请后用完释放是正确的良好的编程习惯


    [此贴子已经被作者于2006-3-28 20:56:06编辑过]
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/28 19:02:00
     
     Rahxephone 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:24
      积分:190
      门派:XML.ORG.CN
      注册:2006/3/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Rahxephone发送一个短消息 把Rahxephone加入好友 查看Rahxephone的个人资料 搜索Rahxephone在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Rahxephone的博客5
    发贴心情 
    malloc 与c++重的new有一些区别:
    感觉主要的是malloc不会自动调用类的构造函数,
    但是new可以。
    对于malloc分配的内存是否连续我也没注意。如果物理上不连续的话。
    那么int *i=malloc(10*sizeof(int));i[6]就因该不是地址为(i+6)了,那么怎么赋值,感觉有点不太对。觉得物理地址因该连续吧。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/31 23:11:00
     
     elfstone 帅哥哟,离线,有人找我吗?射手座1983-12-6
      
      
      等级:大四(总算啃完XML规范了)
      文章:185
      积分:1177
      门派:IEEE.ORG.CN
      注册:2006/2/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给elfstone发送一个短消息 把elfstone加入好友 查看elfstone的个人资料 搜索elfstone在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看elfstone的博客6
    发贴心情 
    以下是引用Rahxephone在2006-3-31 23:11:00的发言:
    malloc 与c++重的new有一些区别:
    感觉主要的是malloc不会自动调用类的构造函数,
    但是new可以。
    对于malloc分配的内存是否连续我也没注意。如果物理上不连续的话。
    那么int *i=malloc(10*sizeof(int));i[6]就因该不是地址为(i+6)了,那么怎么赋值,感觉有点不太对。觉得物理地址因该连续吧。

    所谓的连续是在逻辑层面上抽象出来的一个概念。。。
    而在物理层面上不一定就是连续的,举个例子:
    你的内存空间总量为N,这是你要申请M长度的连续空间(M<N),而内存中的实际情况为由于不断的申请和释放,使可用空间零散的存在于内存空间之中,N0,N1...Nk,而每一个相对连续的空间Ni<M,但是N0+N1+...+Nk>M,这时申请仍然能够得到成功分配。。。
    就是这样。。。

    ----------------------------------------------
    Ich liebe erst meines Leben...

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/1 17:47:00
     
     rong9.13 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:15
      积分:247
      门派:XML.ORG.CN
      注册:2006/3/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给rong9.13发送一个短消息 把rong9.13加入好友 查看rong9.13的个人资料 搜索rong9.13在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看rong9.13的博客7
    发贴心情 
    谢谢大家的解答和建议!
    使我对c和c++中关于申请动态空间的异同有了一些了解!
    我又去找了一下数据结构课本,对于用malloc()函数申请一组连续的空间,也就是顺序表,在逻辑上和物理上都是连续的,如果没有足够大的可用空间会申请不成功:对于链表在物理上可以是连续的也可以是不连续的,此时才可以使用零散的可用空间.
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/1 23:25:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/22 20:27:03

    本主题贴数7,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms