当前位置: 代码迷 >> 综合 >> malloc 函数和new的区别
  详细解决方案

malloc 函数和new的区别

热度:67   发布时间:2023-12-06 20:51:04.0



c和c++涉及到动态分配内存的问题时,难免会遇到malloc,今天查了一些资料,探究一下malloc的机制以及和c的区别。

1.malloc 函数的原型:void *malloc(unsigned int num_bytes);  分配长度为num_bytes字节的内存

2.包含的头文件#include<stdlib.h>

3.关于该函数的原型,在以前malloc返回的是char指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

4.在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:

int *p;
p=new int;<pre name="code" class="cpp">int *p;
p=(int *)malloc(128*sizeof(int));
//分配128个(可根据实际需要替换该数值)整型存储单元,
//并将这128个连续的整型存储单元的首地址存储到指针变量p中

 
  


第一、malloc 函数返回的是 void * 类型。对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型 变量”。所以必须通过 (int *) 来将 强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成 强制转换的习惯。
第二、函数的 实参为 sizeof(int) ,用于指明一个 整型数据需要的大小。

malloc 也可以达到 new [] 的效果,申请出一段连续的内存,方法无非是指定你所需要内存大小。
比如想分配100个int类型的空间:
int *p=(int *)malloc(100*sizeof(int));
//连续分配100个int类型的内存


另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。
除了分配及最后释放的方法不一样以外,通过malloc或new得到 指针,在其它操作上保持一致。


  相关解决方案