以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  在C++中使用C的一个malloc函数的疑惑[求助]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=29237)


--  作者:rong9.13
--  发布时间:3/24/2006 8:36:00 PM

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

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


--  作者:elfstone
--  发布时间:3/27/2006 9:08:00 PM

--  

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

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


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

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


--  作者:enorm
--  发布时间:3/28/2006 7:01:00 PM

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


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



--  作者:firstway
--  发布时间:3/28/2006 7:02:00 PM

--  
关于问题2
malloc()后如果一直在用这个内存当然不去释放
问题就在不使用时也不去释放就会有问题
如果是运行时间很长的服务器
不停的malloc()而没有释放
最后可能会使系统内存枯竭

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


[此贴子已经被作者于2006-3-28 20:56:06编辑过]

--  作者:Rahxephone
--  发布时间:3/31/2006 11:11:00 PM

--  
malloc 与c++重的new有一些区别:
感觉主要的是malloc不会自动调用类的构造函数,
但是new可以。
对于malloc分配的内存是否连续我也没注意。如果物理上不连续的话。
那么int *i=malloc(10*sizeof(int));i[6]就因该不是地址为(i+6)了,那么怎么赋值,感觉有点不太对。觉得物理地址因该连续吧。
--  作者:elfstone
--  发布时间:4/1/2006 5:47:00 PM

--  
以下是引用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,这时申请仍然能够得到成功分配。。。
就是这样。。。


--  作者:rong9.13
--  发布时间:4/1/2006 11:25:00 PM

--  
谢谢大家的解答和建议!
使我对c和c++中关于申请动态空间的异同有了一些了解!
我又去找了一下数据结构课本,对于用malloc()函数申请一组连续的空间,也就是顺序表,在逻辑上和物理上都是连续的,如果没有足够大的可用空间会申请不成功:对于链表在物理上可以是连续的也可以是不连续的,此时才可以使用零散的可用空间.

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms