当我们需要做一个成绩管理系统,人数可能为全校学生,也可能为一个班的学生,当我们开辟一个班的数组大小时,如果要存储整个学校的人数时,会出现内存不够用的情况;当我们开辟全校人数大小的数组时,输入一个班人数的大小时,会出现内存浪费的情况。
所以引入malloc函数。
malloc时动态内存分配函数
用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址
malloc的头文件为<stdlib,h>
总的来说:
bool* arr = (bool*)malloc(n * sizeof(bool));
是申请了一个空间大小为n * sizeof(bool)的bool类型的数组,并将其首地址赋值给指针变量arr。
同理,
类型名* 指针变量=(类型名*)malloc(所需空间大小)
是申请了一个给定类型的给定空间大小,并把这块空间的首地址赋值给给定指针
malloc函数返回值
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
malloc函数使用注意事项
malloc函数的返回的是无类型指针,在使用时一定要强制转换为所需要的类型。
在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。
在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配
总体使用方式如下:
#include<stdlib.h>
int*p,*q;
p=(int*)malloc(sizeof(int));//malloc前括号内表示类型,后括号内表示需要的单个内存大小(单个,但是
//可以有很多个)
q=p;//确保始终可以定位首地址
printf("%d",*p);
p++;//输入多个元素
free(q);//free括号内的是首地址
p = NULL;//使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作