malloc,free,new 函数的总结

本文详细介绍了C++中malloc函数的作用、定义、使用方法、与new的区别以及相关解释,帮助开发者更好地理解和运用内存动态分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

malloc函数


一、作用

malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。

二、定义

1.原型

extern void *malloc(unsigned int num_bytes);

2.头文件

#include <stdlib.h>

3.功能

分配长度为num_bytes字节的内存块

4.返回值

如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

5.说明

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

6.相关解释

malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

二、函数声明

1.全名

void *malloc(size_t size);

2.备注

void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者…)

三、与new的区别

在使用上,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)*128);
//分配128个(可根据实际需要替换该数值)整型存储单元,
//并将这128个连续的整型存储单元的首地址存储到指针变量p中
double*pd=(double*)malloc(sizeof(double)*12);
//分配12个double型存储单元,
//并将首地址存储到指针变量pd中

Free()


头文件:malloc.h或stdlib.h
作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数
使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。

new和new[]


一、new运算符

1.作用

给单个对象分配空间

2.语法

//new 数据类型
int q=new int;
int p=new(100);

二、new运算符特点

  1. 自动计算类型所占空间大小
  2. 自动确定返回指针类型,不需要进行类型转换
  3. 可以再分配内存的同时初始化无名对象
  4. 必须用delete来释放空间

三、new[]

1.作用

给数组对象初始化

2.必须用delete[]来清空内存空间

int *q=new int[n];
delete []q;
### 回答1: mallocfree是C语言中的动态内存分配和释放函数,用于在程序运行时动态地分配和释放内存空间。malloc函数用于分配一块指定大小的内存空间,free函数用于释放已分配的内存空间。 new和delete是C++语言中的动态内存分配和释放运算符,用于在程序运行时动态地分配和释放内存空间。new运算符用于分配一块指定大小的内存空间,并返回指向该内存空间的指针,delete运算符用于释放已分配的内存空间。 总的来说,mallocfree是C语言中的动态内存分配和释放函数new和delete是C++语言中的动态内存分配和释放运算符。它们的使用方法和功能类似,但是在C++中,new和delete还可以用于对象的构造和析构。 ### 回答2: 1. mallocfree 它们是C语言中的动态内存分配和释放函数,用于动态分配和释放内存,即在程序运行时根据需要从系统堆中分配出一块连续的、指定大小的内存,并返回指向这块内存的指针;当程序不需要使用这块内存时,使用free函数将其释放回内存堆。由于mallocfree是C语言中的函数,因此在使用时需要手动指定内存大小,且不支持自动释放内存。 2. new和delete 它们是C++语言中的动态内存分配和释放方式,和malloc/free相比,new和delete更加方便、安全,且支持自动释放内存。new关键字可以自动计算需要的内存大小并返回对应类型的指针,delete关键字可以自动释放内存,而无需手动指定内存大小。 new和delete的内存管理是面向对象的,它们可以调用构造函数和析构函数来初始化和清除对象,可以确保正确的内存布局和类型安全,这对于C++编程来说非常重要。 3. 区别对比 从功能上来说,mallocfree是C语言中的函数,用于动态内存分配和释放,需要手动指定内存大小,不支持自动释放内存;而new和delete是C++语言中的关键字,支持自动计算内存大小、自动调用类型的构造函数和析构函数、自动释放内存。 从安全性和易用性上来说,new/delete比malloc/free更安全、更方便,由于支持自动计算内存大小和类型安全,可以避免因内存管理不当而发生错误。同时,new/delete也更加适用于面向对象的程序设计,可以自动调用构造函数和析构函数,确保对象的正确创建、初始化和清除。因此,在C++编程中,建议使用new和delete来进行动态内存管理。 总之,malloc/freenew/delete都是动态内存管理的方式,根据不同编程语言和场景需求,选择适合的动态内存分配和释放方式非常重要,同时注意内存分配和释放的规范和安全性。 ### 回答3: mallocfreenew 和 delete 都是用于动态内存分配和释放的关键字。它们在使用方式、机制、效率和能力上存在差异。 1. mallocfree malloc 是 C/C ++ 程序中用于动态分配内存的函数,它会根据用户的需求分配一块指定大小的内存块并返回其首地址,通常用于分配结构体或数组等动态内存。而 free 用于释放之前分配的由 malloc 分配的内存块,将内存块标记为可重用状态。 虽然 mallocfree 可以做到动态分配和释放内存,但是它们却没有处理对象的构造和析构,因此在使用过程中,如果需要先执行构造函数再分配空间或者先释放空间再执行析构函数,就需要用到以下两个关键字。 2. new和delete new 和 delete 是 C++ 中的关键字,它们不仅可以进行动态内存的分配和释放,而且还可以调用对象的构造和析构函数,能够在对象构造时自动执行构造函数,在对象销毁时自动执行析构函数,因此是一种更高级别的内存管理方式。 new 用于分配动态内存并调用构造函数来初始化对象,而 delete 用于调用析构函数并释放分配的内存,从而在对象生命周期的开头和结尾负责构造函数和析构函数的调用。 总之,mallocfree 是 C 语言的标准库关键字,而 new 和 delete 是 C++ 的关键字,它们之间的区别在于对于对象是否需要额外的构造函数和析构函数的调用等方面。因此,在实际的开发过程中,应根据需要选择合适的内存分配和释放方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值