C语言:都是动态分配内存,malloc和new有什么区别?malloc分配的内存是连续的吗?new分配的内存不连续吗?

如题所述

malloc是C语言的分配内存接口,new操作会在分配内存的情况下再调用构造函数对内存块进行初始化,malloc和new都是从堆中分配内存,所以都不能保证分配的内存是连续的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-01
对于内置的类型,malloc和new的作用是相同的,分配的都是连续的空间
在碰到class之类的自定义类型里,用new时,会自动调用类的构造函数,用delete会自动调用类的析构函数,如果用free,则无法执行相关的操作

new 是C++里的关键字
如果用C++语言,建议用new追问

他们分配的内存是否连续呢?这个怎么区分啊,要看具体情况吗?

追答

这个不用怀疑,分配的内存都是连续的

追问

动态分配内存不是对应着链表吗?链表内存不是连续的啊

本回答被网友采纳
第2个回答  2013-08-25
其他答案中的2楼是错的,我的实践证明malloc在少量内存分配是是连续的,可以用数组的方式调用,但是在大量内存分配时却不是连续的,若用数组的方式遍历的话,程序会崩溃。总之,malloc不能保证分配的内存是连续的。
第3个回答  2012-12-01
malloc和free函数是C语言中的函数,是刚开始的时候C就有的,new 和delete是后来C++对C语言内存管理的扩充。他们都是连续空间。
第4个回答  2012-12-01
malloc才是C语言的,new是C++用的,不知道你说的到底是哪个语言.追问

知道,就是C/C++语言!

追答

new 比malloc多了个自动调用类的构造函数的功能,所以创建类的对象应该用new ,如果只是简单的数组比如char[10]两种一样.
new 出来的数组内存是连续的,但两次new 之间是不连续的.

相似回答