2020-09-27

                          **动态内存分配**

我们需要知道的是:创建和处理在程序执行的过程中可以增大或减小的动态数据结构,需要使用动态内存分配——即为了增加新的节点,一个程序具有从系统获得更多内存空间的能力;而当这些空间不再需要时,程序还能将其释放掉。
函数malloc和free以及运算符sizeof是实现动态内存分配的基础。函数malloc以请求分配的字节数为实参,返回一个指向分配到的内存空间的首地址、类型为void的指针(即指向void的指针)。还有就是:类型为void的指针可以被赋值给任意类型的指针变量。函数malloc通常与运算符sizeof配合使用。 例如:
newPtr=malloc(sizeof(struct node));
首先计算表达式sizeof(struct node)的值,以确定类型为struct node 的结构体占用空间的大小,然后申请这样字节大小的一块内存区域,并将指向这块内存区域的指针赋值给指针变量newPtr。分配到的这块内存区域不能确保是已经初始化了的,虽然很多的函数实现为了安全起见会将其初始化。若系统没有可分配的内存,则函数malloc返回NULL。
函数free的功能是释放内存空间,即将内存空间返还给系统。这样,这块内存空间就可以在将来由系统重新分配。若要释放掉刚才用函数malloc调用语句分配到的内存空间,则需要使用:
free(newPtr);
为了创建和修改动态数组,C还提供了函数calloc和realloc。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页