动态分配内存的初始化

9

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

malloc()

calloc()

realloc()

new[ ]

答案:B;

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,在函数体内定义的内置类型变量都不进行初始化。

即如果是  new()就会初始化,如果是new []不会。 因为前者有函数符号()

时间: 2024-10-27 00:43:13

动态分配内存的初始化的相关文章

C中动态分配内存

//使用动态分配内存时,要包含头文件<stdlib.h> //malloc的参数为要分配的内存的字节数 //其返回所分配内存的第一个字节的地址 //返回类型是void*,但实际中常常转换为具体类型便于使用 //如果因某种原因而不能分配将返回NULL指针,所以使用时应验证是否分配成功 int *pNumber1=(int *)malloc(100*sizeof(int)); //calloc把内存分配为给定大小的数组,并初始化分配的内存为0 //calloc需要两个参数,1为数组元素个数,2为数

动态分配内存专题

我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么要通过函数来实现动态分配内存呢?系统难道不是会自动分配内存吗??既然有人会问这样的问题,那么我在这里好好的讲解一下吧!首先让我们熟悉一下计算机的内存吧!在计算机的系统中有四个内存区域:1)栈:在栈里面储存一些我们定义的局部变量以及形参(形式参数):2)字符常量区:主要是储存一些字符常量,比如:char *p_str="cgat";其中"cgat"就储存在字符常量区里面:3)全局区:在全

C++动态分配内存

动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间. 1.内存分配操作符new 和 new[] Example: (1)给单个元素动态分配内存 int * pointer = new int; //动态分配一个用于存放整型变量的内存空间,并将该存储空间的地址返回给pointer (2)给多个元素(数组)动态分配内存空间 int * p = new int [10]; //动态分配可以存放10个整型变量的内存空间,并将该存储空间的首

比较C/C++和Delphi中的字符串和字符数组(数组和动态分配内存的情况)

本文所讲解的只是从其中一个方面来看待进行的总结,所以有必要结合<Delphi字符串与字符数组之间的转换(初始化的重要性)>等文章进行更全面的了解,会从更多方面来理解字符串.内存.类型转换 C/C++中的字符串.字符数组.字符指针分配的内存空间 我们知道在C/C++中,我们可以这样理解字符串和字符数组 1)字符串,就是一个以 '\0' 结尾的字符数组 2)字符数组,包括字符串,但是不一定要以 '\0' 结尾,如果不是以'\0' 结尾,那么就不能当做字符串使用 在C/C++中,使用字符串可以通过数

条款十一: 为需要动态分配内存的类声明一个拷贝构造函数和一个拷贝赋值运算符

看下面一个表示string对象的类: // 一个很简单的string类 class string { public: string(const char *value); ~string(); ... // 没有拷贝构造函数和operator= private: char *data; }; string::string(const char *value) { if (value) { data = new char[strlen(value) + 1]; strcpy(data, value

动态分配内存函数:malloc(),calloc(),realloc(),以及memset(),free() 详细总结

以下资料大部分来源网络,个人进行了汇总和添加. 内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的,变量生命长度:函数结束即释放内存. 堆区(heap):一般由程序员分配与释放,即程序员不释放,程序结束时可能由操作系统回收(C/C++没有此等回收机制,Java/C#有),注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 全局区(静态区)(static):全局变量和静态变量的存储是放在一块儿

C语言中二维数组如何申请动态分配内存

C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc.h> int main() { int **a; int i, j; a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行 for (i = 0; i < 3; ++i){//为每列分配4个大小空间 a[i] = (int*)malloc(sizeof(int

服务器打开共享内存的初始化

服务器共享内存以及客户端打开服务器获得通知过程 打开GS就会进行共享内存的初始化,过程很复杂,看了很多次,今天看的时候终于了解了大概了 bool DataLayer::init() { int pid = GetCurrentProcessId(); auto path = Plug::GetCurrentPath(); path += L"pid.txt"; auto file = _wfopen(path.c_str(), L"wb"); char buf[10

你必须知道的指针基础-6.内存的初始化及结构体的使用

一.内存的使用 1.1 你创建的内存区域可能是脏的 当我们创建一个内存区域的时候,内存中的数据可能是乱七八糟的(可能是其他代码用过后遗留的数据),如下面一段代码: int main(int argc, char *argv[]) { // 下面申请的20个字节的内存有可能被别人用过 char chs[20]; // 这个代码打印出来的可能就是乱码,因为printf的%s是“打印一直遇到'\0'”. printf("%s\n",chs); return 0; } 其运行结果是如下图所示的