malloc函数
Posted a-s-m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了malloc函数相关的知识,希望对你有一定的参考价值。
malloc函数简介
须要包括头文件:#include ‘<stdlib.h>
函数声明(函数原型):void *malloc(int size);
函数功能:在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。
C,C++规定,void* 类型能够强制转换为不论什么其他类型的指针。
从函数声明上能够看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,而且能够自己主动计算所须要大小。比方:
int *p; p = new int;
返回类型为int* 类型(整数型指针)。分配大小为 sizeof(int);
或:
int* parr; parr = new int [100];
返回类型为 int* 类型(整数型指针)。
分配大小为 sizeof(int) * 100;
而 malloc 则必须由我们计算要字节数,而且在返回后强行转换为实际类型的指针。
int* p; p = (int *) malloc (sizeof(int));
使用事项:
第一、malloc 函数返回的是 void * 类型。假设你写成:p = malloc (sizeof(int)); 则程序无法通过编译。报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。
第二、函数的实參为 sizeof(int) 。用于指明一个整型数据须要的大小。假设你写成:
int* p = (int *) malloc (1);
代码也能通过编译,但其实仅仅分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归。而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容所有被清空。
申请出一段连续的内存
malloc 也能够达到 new [] 的效果。申请出一段连续的内存,方法无非是指定你所须要内存大小。
比方想分配100个int类型的空间:
int* p = (int *) malloc ( sizeof(int) * 100 );
分配能够放得下100个整数的内存空间。
另外有一点不能直接看出的差别是,malloc 仅仅管分配内存。并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。
除了分配及最后释放的方法不一样以外,通过malloc或new得到指针。在其他操作上保持一致。
以上是关于malloc函数的主要内容,如果未能解决你的问题,请参考以下文章
在一台内存为2G的机器上,malloc(20G) 会怎样?如果是new(20G) 会怎样?
Malloc 函数可以申请任意大小的堆区内存,如果 malloc(0) 会怎么样啊?这个代码好像也没有报错。