二.动态内存分配
(1)概念
之前所有的内存都是由系统管理,如果希望更加灵活得管理使用的内存,可以使用动态分配的内存
动态分配的内存由程序员自己管理,自己申请,自己释放
如果没有释放申请的内存就会造成内存泄漏
动态申请的内存在内存中的段落是在堆区
(2)使用
使用动态内存需要一组标准函数,为了使用这些标准函数需要包含stdlib.h头文件
malloc函数可以动态分配连续多个字节的内存空间
参数是希望分配内存的长度(单位是字节)
返回值就是分配的内存的首地址,如果分配失败返回NULL指针
该函数一定要判断返回值
返回指针是void *类型,需要强转后才能使用
malloc函数分配的内存没有初始化
free函数用来释放动态分配的内存
参数就是要释放内存的首地址
free函数不需要知道释放内存的大小
注:一段内存只能释放一次,多次释放会发生严重错误
分配的内存必须释放,如果不释放会造成内存泄漏
注:程序结束后本程序使用的所有内存全部释放
calloc函数可以动态分配连续多个字节的内存空间
calloc函数第一个参数是分配内存单元个数,第二个参数是单个内存单元的大小
calloc分配的内存会被初始化为0
realloc函数用来调整一段已分配空间的大小
第一个参数是要调整的内存首地址(给NULL相当于malloc)
第二个参数是要调整成的大小(给0相当于free)
返回调整后内存的首地址
练习:
由用户输入数字个数和所有数字,计算所有数字的和(使用动态内存)