首页 > 试题广场 >

malloc和new的区别

[问答题]
malloc是C的函数,new是C++的关键字,malloc可以申请指定任意大小的内存,new只可以申请类型整数倍大小的内存,malloc返回void*, new返回类型是安全的,malloc失败返回NULL,new失败返回异常
发表于 2022-06-14 21:57:54 回复(0)
new操作符在自由存储区上为对象动态分配内存,malloc函数在堆上动态分配内存; new内存分配成功时,返回的是对象类型的指针,malloc返回的则是void *,需要强转成需要的类型; new内存分配失败时不返回NULL,会抛出bac_alloc异常,malloc返回NULL; new申请内存时无须指定内存块大小,编译器会进行计算,而malloc需要显式指出所需内存尺寸
发表于 2023-06-28 11:02:08 回复(0)
语言差异: malloc 是C语言中的函数,位于 <stdlib.h> 头文件中。 new 是C++中的运算符,属于C++的关键字,不需要包含额外的头文件。 返回类型: malloc 返回 void* 类型的指针,需要显式进行类型转换。 new 返回所分配类型的指针,不需要进行显式类型转换。 分配内存的数量: malloc 接受一个参数,即要分配的内存空间的大小(以字节为单位)。 new 可以用于分配单个对象,也可以用于分配数组。如果用于分配数组,需要在 new 后面加上 []。 构造函数的调用: 使用 malloc 分配的内存不会调用对象的构造函数,因为 malloc 只是分配内存空间,不关心对象的构造。 使用 new 分配的内存会调用对象的构造函数来初始化对象。 分配失败处理: malloc 在内存分配失败时返回 NULL,程序员需要手动检查返回值以处理分配失败的情况。 new 在内存分配失败时抛出 std::bad_alloc 异常,程序员可以使用异常处理机制来处理分配失败的情况。</stdlib.h>
编辑于 2024-04-06 14:33:39 回复(0)
malloc--c语言函数--申请时确定大小--返回任意类型指针需要强转不安全--失败返回NULL; new--C++函数--申请时不需要确定大小编译器会计算大小--返回一个指定的类的对象类型--失败会抛出一个异常
发表于 2022-11-04 19:57:48 回复(0)
一个位置,一个格式
发表于 2022-08-24 00:48:29 回复(0)
malloc是C函数,new是c++关键字,malloc申请空间可以任意大小,new只能是数据类型的整数倍,malloc申请失败会返回null,new则是会报错,malloc返回的是void类型需要强转而new直接返回对象类型指针
发表于 2024-03-19 21:12:44 回复(0)
1、malloc是库函数,new是关键字 2、malloc申请内存时需要指定内存大小,new不需要 3、malloc在堆上动态分配内存,new在自由存储区上为对象动态分配内存 4、malloc的返回值是void *,需要强制转换成需要的类型,new返回值是对象类型的指针,不需要强制转换 5、malloc申请失败返回NULL,new失败返回bac_alloc异常
发表于 2024-03-11 10:09:20 回复(0)
(1)属性上的区别:new/delete是c++中的关键字,若要使用需要便一起的支持;事例:int *p = new int (也可以指定内存放置对象int *p = new int(6)) malloc/free是库函数,若要使用则需要引入相应的头文件.声明:(void *)malloc(int size); (2)使用上的区别:malloc:申请空间需要显式填入申请内存大小; new:无需显式填入申请内存的大小,new会根据new的类型分配内存。 (3)内存位置的区别:new分配的内存空间在自由存储区。 malloc:申请的内存是堆空间。 (4)返回值类型的区别:new操作符内存分配成功时,返回的时对象类型的指针。 malloc内存分配成功后返回的是void*,如需转换则需要强转。 (5)内存分配失败情况的区别:malloc内存分配失败时返回null。 new内存分配失败时,不返回null,而是会抛出bac_alloc异常, (6)malloc不可以重载,new可以重载
发表于 2023-11-15 11:20:41 回复(0)
malloc是C语言的函数,通过free函数释放内存;new是C++的操作符,用delete来释放内存;2.malloc返回的是void*指针,不确定返回类型,需要通过强制转换显示类型,而new会自动返回正确的类型;3.malloc申请内存时需要指定内存大小(sizeof),new会根据对象自动分配;4.malloc只是申请了一块内存,如果存储的是类的对象,不会自动调用构造函数
发表于 2023-09-19 19:49:49 回复(0)
(1)属性上的区别:new/delete是c++中的关键字,若要使用需要便一起的支持; malloc/free是库函数,若要使用则需要引入相应的头文件。 (2)使用上的区别:malloc:申请空间需要显式填入申请内存大小; new:无需显式填入申请内存的大小,new会根据new的类型分配内存。 (3)内存位置的区别:new分配的内存空间在自由存储区。 malloc:申请的内存是堆空间。 (4)返回值类型的区别:new操作符内存分配成功时,返回的时对象类型的指针。 malloc内存分配成功后返回的是void*,如需转换则需要强转。 (5)内存分配失败情况的区别:malloc内存分配失败时返回null。 new内存分配失败时,不返回null,而是会抛出bac_alloc异常, (6)malloc不可以重载,new可以重载。
发表于 2023-08-25 11:30:49 回复(0)
1. 来源,malloc是C函数,new是C++关键字; 2. 内存,malloc可指定任意大小内存,new必须是整数倍大小; 3. 返回, malloc返回void*,malloc返回对象类型指针; 4. 错误, malloc失败返回NULL,new失败返回异常。
发表于 2023-08-16 09:54:47 回复(0)
malloc 是一个函数,使用时需要根据申请的类型进行强制类型转换,释放内存用free new 是一个关键字,不需要进行强制类型转换,释放内存用delete
发表于 2023-08-10 21:57:32 回复(0)
1、malloc是库函数,需要头文件支持,而new是关键字,不需要头文件支持 2、malloc分配内存时需要指定内存大小,new不需要 3、malloc分配成功返回void *,new分配成功返回对象指针 4、malloc分配失败返回null,new抛出异常
发表于 2023-08-07 10:44:30 回复(0)
内存位置不同,返回类型的安全性不同,内存分配失败时返回值不同,指定内存大小不同
发表于 2023-07-19 19:43:05 回复(0)
一个是c语言,一个是c++分配内存的关键字
发表于 2023-07-10 13:30:59 回复(0)
molloc是函数 ,而new是关键字 malloc不会调用构造函数,而new会调用构造函数。 申请内存位置不同 new会在自由存储区动态分配内存,而malloc会在栈区域动态分配内存 返回类型安全性不同 new会严格返回对象类型指针,因此new是符合类型安全的操作,而malloc返回的是void类型的指针,需要强制转换。 失败返回类值不一样 new失败返回一个标志位,malloc返回的是NULL。 是否需要指定内存大小不同 new会根据对象类型自动分配大小,而mallic需要指定开辟的空间大小。
发表于 2022-10-26 20:49:05 回复(1)
1.申请的内存所在位置不同。new从自由存储区中申请,malloc从堆中申请。(自由存储区是C++虚拟出来的,与堆不完全相同) 2.返回类型不同,导致安全性不同。new是返回对象类型的指针,与所有申请内存的类型相匹配,malloc返回的是void *指针,需要将其强制转换为我们需要的类型。(例:char *) 3.内存分配失败时,返回值不同。new失败,会抛出异常;malloc失败,返回NULL。 4.是否需要指定内存大小。new不需要手动指明需要的内存块大小,编译器会根据申请的类型信息自动进行计算;malloc需要手动指明需要的内存大小。
发表于 2022-09-24 22:54:06 回复(0)
内存位置、安全性、返回值、指定内存大小
发表于 2022-06-23 17:38:50 回复(0)