首页 > 试题广场 >

下面哪种CC++分配内存的方法会将分配的空间初始化为0

[单选题]
下面哪种C/C++ 分配内存的方法会将分配的空间初始化为0
  • malloc()
  • calloc()
  • realloc()
  • new[ ]
1) malloc 函数: void *malloc(unsigned int size)

     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。

2)calloc 函数: void *calloc(unsigned int num, unsigned int size)

     按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。

    calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。
3)realloc 函数: void *realloc(void *ptr, unsigned int size)

    动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。

    申请的内存空间不会进行初始化。
4)new是动态分配内存的运算符,自动计算需要分配的空间,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
发表于 2015-08-08 15:47:25 回复(13)
这里仅针对new[]说明一下。
#include <iostream>
#include <cstring>

using  namespace std;

class A {
public:
    int a;
    static  int b;
};
int A::b;
int main(int argc ,char* argv[])
{
    A *test = new A;
    cout << test->a << endl << test->b << endl<< endl;

    int *a = new int[4];
    for (int i = 0; i < 4; ++i)
        cout << *a++ << ' ';
    return 0;
}
我们看看输出:

选项D,是new数组的形式。但是, new[](new的数组版)要求元素对象的类型必须具有默认构造函数(内建类型的“默认构造函数”是什么也不做),否则将不能使用new[]。
不过,C++11中已经不提倡用c array。更多的是用vector代替
编辑于 2016-08-26 16:47:30 回复(0)
1) malloc 函数: void *malloc(unsigned int size)

     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。

2)calloc 函数: void *calloc(unsigned int num, unsigned int size)

     按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。

    calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。 
3)realloc 函数: void *realloc(void *ptr, unsigned int size)

    动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。

    申请的内存空间不会进行初始化。
4)new是动态分配内存的运算符,自动计算需要分配的空间,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
发表于 2015-10-24 22:39:13 回复(0)

malloc()函数只是申请了连续的空间,但calloc()函数还将其初始化为0

发表于 2018-11-21 08:01:19 回复(0)
new的内部就是调用的malloc,所以没有初始化,源码面前,了无秘密
发表于 2020-04-11 14:19:42 回复(0)
1) malloc 函数: void *malloc(unsigned int size)

     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。

2)calloc 函数: void *calloc(unsigned int num, unsigned int size)

     按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。

    calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。 
 3)realloc 函数: void *realloc(void *ptr, unsigned int size)

    动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。

    申请的内存空间不会进行初始化。
4)new是动态分配内存的运算符,自动计算需要分配的空间,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
发表于 2018-06-12 23:02:54 回复(0)
calloc( ) 会将分配的空间初始化为0
发表于 2021-09-26 19:27:07 回复(0)
#include <iostream>

using namespace std;

// int* arr = new int[3];
int main() {
    int* arr = new int[3];
    printf("%d\n", *arr);
   
    return 0;
}
// 我的g++版本为11.4.0,在高版本g++中,使用new[]对于内置类型int,不管是在函数外,还是在函数内都能初始化
发表于 2024-06-22 17:54:41 回复(0)
当calloc申请内存空间后,会自动初始化内存空间为 0
发表于 2019-04-06 16:21:44 回复(0)
1) malloc 函数: void *malloc(unsigned int size)

     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。

2)calloc 函数: void *calloc(unsigned int num, unsigned int size)

     按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。

    calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。 
3)realloc 函数: void *realloc(void *ptr, unsigned int size)

    动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。

    申请的内存空间不会进行初始化。
4)new是动态分配内存的运算符,自动计算需要分配的空间,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
发表于 2017-08-15 17:02:29 回复(0)
1) malloc 函数: void *malloc(unsigned int size)

     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。

2)calloc 函数: void *calloc(unsigned int num, unsigned int size)

     按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。

    calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。
3)realloc 函数: void *realloc(void *ptr, unsigned int size)

    动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size。

    申请的内存空间不会进行初始化。
4)new是动态分配内存的运算符,自动计算需要分配的空间,在分配类类型的内存空间时,同时调用类的构造函数,对内存空间进行初始化,即完成类的初始化工作。动态分配内置类型是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化。
发表于 2017-03-03 21:49:33 回复(0)
malloc = memory allocate calloc = clear allocate
发表于 2017-01-12 16:53:05 回复(0)

The calloc() function contiguously allocates enough space for count objects that are size bytes of memory each and returns a pointer to the allocated memory.  The allocated memory is filled with bytes of value zero.

编辑于 2016-10-18 21:36:28 回复(0)
对内置类型int* ptr = new int不初始化,int* ptr = new int()初始化, int* ptr = new int[5]不初始化,int* ptr = new int[5]()不初始化,对非内置类型(int.double.float.char),不加括号也会初始化
发表于 2016-05-19 23:18:13 回复(0)