C++程序设计——动态分配内存malloc/free new/delete

本文介绍了如何使用malloc/free动态分配内存以及new/delete在C++中的应用,包括内存动态请求、内存释放的原则,以及它们在处理数组和对象时的区别。重点在于提升内存利用效率和避免栈溢出问题。

提示:本文是对课堂相关材料、知识的汇总笔记


前言

如果能够根据需要多少就分配多少内存就好了~

cin>>n;
int a[n];

然而我们都知道,声明一个数组,给他分配内存,其大小必须是确定的。在学习了指针之后,我们进一步学习了动态分配内存的相关知识,对于内存的利用率极大地提高。


一、动态分配内存之malloc/free

解决前述问题的办法

定义一个指针,然后把动态分配的内存空间的起始地址保存在该指针中,如:

int *scores;
scores  =  (int*) malloc(n * sizeof(int));

1.malloc

来看看malloc的函数原型:

void  *malloc(size_t  size)

功能:在堆中申请一块内存;
参数:申请的字节数;
返回值:一个指向该内存的指针或NULL;
头文件:stdlib.h

函数表示返回一个地址(指针),void表示对该地址的访问方式待定,即我们使用时需要进行指定其访问地址的类型,告诉计算机以何种方式获得信息。例如上式,(int*)强制转换为指向int类型元素的指针。

函数的参数是动态请求内存的大小。对于请求一个数组(如int)的内存空间,由于数组每个元素的类型都一样,可以用sizeof()函数获得一个类型元素的内存大小,再乘以需要数组的大小n即可。

 为什么可以动态分配内存呢?

这是因为,一般是在中分配内存,而动态分配内存是在

堆中的特点:

1)只能通过malloc/new进行分配(c语言)

2)分配的内存空间不会自动释放,需要程序员使用free/delete进行释放

2.free

free的函数原型:

void free(void *ptr)

功能:释放堆中的一块内存;
参数:指向内存首地址的指针;
返回值:无;
头文件:stdlib.h

变量不用了就给我释放,明白?(这该死的霸道 

二、动态分配内存之new/delete态内存分配之new/delete

c++动态分配内存的方式更精简实则也更强大(对象里面构造时也会用到new)

int *scores = new int[n];

new/delete: 动态申请和释放内存

int* pInt = new int;
Student* pStu = new Student;
delete pInt;
delete pStu;

new[]/delete[]:动态申请和释放内存 

int* pInt = new int[n];
Student* pStu = new Student[n];
delete [] pInt;
delete [] pStu;


总结

动态分配内存对于一些输入未知、组数众多数据变化多的问题,能够避免爆栈等优点,必须得掌握。事实上,对于结构体对象、自定义对象等等,新创建一个对象、构造函数等等也蕴含动态分配内存的知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值