EchoDemo's Blogs

C/C++申请动态内存

(1)malloc函数

malloc函数是C语言中#include<stdlib.h>头文件下用于申请动态内存的函数,其返回类型是申请的同变量类型的指针,其基本用法如下:

typename* p=(typename*)malloc(sizeof(typename));

int* p=(int*)malloc(sizeof(int));
node* p=(node*)malloc(sizeof(node));

这个写法的解释如下:以需要申请的内存空间大小(即sizeof(node))为malloc函数的参数,这样malloc函数就会向内存申请一块大小为sizeof(node)的空间,并且返回指向这块空间的指针。但是此时这个指针是一个为确定类型的指针void*,因此需要把它强制转换成node型的指针,在malloc之前加上(node)。再把这个指针赋给node*型的指针变量p,就成功地申请了一块node类型大小的内存空间。如果申请失败,则会返回空指针NULL。申请失败一般在使用malloc申请了较大动态数组时发生。

在使用完malloc开辟出来的空间后必须将其释放,否则会造成内存的泄露。malloc函数需要使用free函数来进行内存的释放。假设需要释放的内存空间的指针变量为p,则:free(p);就可以实现内存的释放了。

(2)new运算符

new是C++中用来申请动态空间的运算符,其返回类型同样是申请的同变量类型的指针,其基本用法如下:

typename* p=new typename;

int* p=new int;
node* p=new node;

相比于malloc函数来说,new的写法要简洁得多。另外,如果new运算符申请动态空间失败,则会启动异常机制处理而不是像malloc那样返回NULL。和malloc一样的是:申请失败一般是在申请了较大动态数组时发生。与此同时,new运算符也有对应的释放内存函数:delete(p);

🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------