使用malloc函数或new运算符为链表结点分配内存空间
使用malloc函数或new运算符为链表结点分配内存空间
当我们定义链表结点类型后,如何在每次需要使用新结点时临时分配相应大小的内存空间给新结点,本文介绍两种方法,即C语言中的malloc函数与C++中的new运算符。
1.malloc函数
malloc函数是C语言中stdlib.h
头文件下用于申请动态内存的函数,其返回类型是申请的同变量类型的指针,基本用法。
typename* p=(typename*)malloc(sizeof(typename));
以申请一个int型变量和一个node型结构体变量比例:
int* p=(int)malloc(sizeof(int));
node* p=(node)malloc(sizeof(node));
这个写法的逻辑是:以需要申请的内存空间大小(即sizeof(node))为malloc函数的参数,这样malloc函数就会向内存申请一块大小为sizeof(node)
的空间,并且返回指向这块空间的指针。但是此时这个指针是一个未确定类型的指针void*
,因此需要把它强制转换为node*型的指针,因此在malloc之前加上(node *)
。这样等号右边就得到一个node *型指针,并通过赋值等号把这个指针赋给node *,就成功申请了一块node类型大小的内存空间,即一个node *型的结构体变量,并通过指针p来访问它。如果申请失败,则会返回空指针NULL。失败一般发生在使用malloc申请了较大的动态数组,即
int *p=(int*)malloc(1000000 * sizeof(int));
//这样malloc会返回空指针并赋值给p。因此只要是正常分配一个结点的空间,是不会失败的。