首页 > 试题广场 >

关于C++中的new和C语言中的malloc,以下说法哪几个

[单选题]
关于C++中的new和C语言中的malloc,以下说法哪几个是正确的:()
  • 都是用来申请内存的
  • 都是函数
  • 都会调用构造函数
  • 他们没有区别,都一样
/**
     * 字符翻转,以字符为单位进行翻转,空格之间为一个字符
     * @param str
     */
    public void reverse(String str){
        char[] chars = str.toCharArray();
        int[] pos = new int[chars.length];
        int index = 0;
        for(int i=0;i<chars.length;++i){
            if(chars[i]==' '){
                pos[index++] = i;
            }
        }
        // 逆序遍历pos数组获取字符
        for(int i=pos.length-2;i>=0;--i){
            if(pos[i+1] - pos[i]==1){
                System.out.println(" ");//两个相连的空格
            }
            System.out.println(new String(chars,pos[i],pos[i-1]-pos[i]+1));
        }
    }
第一遍遍历字符数组,获取空格在数组中的位置,逆序输出时候根据空格数组输出

发表于 2019-09-15 17:27:36 回复(0)
这道题选A
B中malloc是库函数,而new是操作符
C是错误的,因为编译器无权调用库函数来执行构造函数和析构,无法满足创造动态对象的要求,所以才有了new和delete
发表于 2019-09-16 11:13:25 回复(0)
这里为附加一些new和malloc的区别:
        1,malloc是库函数,而new是操作符
        2,malloc需要申请内存大小,new不需要
        3,malloc返回的指针类型需要进行强转,但是new不需要
        4,malloc不能进行重载,但是new可以
        5,底层实现原理不同:
                malloc底层原理实现:当开辟的空间小于128k时,调用brk()函数,当开辟的空间大于128k时,调用mmap(),malloc采用的是
                                  内存池的管理方式,先申请大块内存作为堆区,然后将堆区分为多个内存块,当用户申请时,就调出一块合适的给用户,
                new底层原理实现:
                            1,创建一个新的对象
                            2,将构造函数的作用域赋值给这个新的对象
                            3,执行构造函数中的代码
                            4,返回新对象
发表于 2021-11-17 13:22:14 回复(0)
malloc是C语言中的的标准库函数new是C++的运算符。它们都可用于申请动态内存和释放内存。

由于malloc是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc。
发表于 2020-03-07 15:44:18 回复(0)
1,malloc是库函数,而new是操作符
2,malloc需要申请内存大小,new不需要
3,malloc返回的指针类型需要进行强转,但是new不需要
4,malloc不能进行重载,但是new可以
5,底层实现原理不同:
    malloc底层原理实现:当开辟的空间小于128k时,调用brk()函数,当开辟的空间大于128k时,调用mmap(),malloc采用的是
                                  内存池的管理方式,先申请大块内存作为堆区,然后将堆区分为多个内存块,当用户申请时,就调出一块合适的给用户
     new底层原理实现:
                           1,创建一个新的对象
                           2,将构造函数的作用域赋值给这个新的对象
                           3,执行构造函数中的代码
                           4,返回新对象
发表于 2022-04-30 15:06:35 回复(0)
总结malloc和new的区别 1.new是C++关键字操作符,需要编译器支持,malloc是标准库函数,需要头文件支持 2.new在自由存储区分配内存,malloc在堆区分配内存 3.new无需指定内存大小,malloc需要指定内存大小 4.new对象分配成功,返回对象的类型,malloc默认返回void*,需要对返回值进行强转 5.new分配失败会返回bac_alloc异常,malloc失败返回Null 6.new调用构造析构函数对对象进行初始化,malloc只动态的分类空间,new函数先用malloc申请足够空间,然后调用对应类型的构造函数对其初始化,delete时,先调用析构函数后,后用free释放地址 7.new可重载,malloc不允许重载
发表于 2022-04-22 10:38:47 回复(0)

new:运算符,用于(还有内存分配函数的重载等)动态内存中分配指定类型的对象 会调用对象的构造函数来初始化对象

malloc:函数,用于分配指定字节数的内存块,只分配内存而不调用任何构造函数来初始化内存

发表于 2023-06-25 10:55:57 回复(0)
a
发表于 2020-07-13 11:26:04 回复(0)

A

发表于 2020-03-05 15:18:08 回复(0)
A
发表于 2020-03-03 21:06:52 回复(0)