(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);