动态内存管理(malloc,free,callc,realloc)以及柔性数组

一、为什么会有动态内存分配

1.1向内存申请空间的两种形式:

        在栈空间上申请空间(第一种:空间大小不可变):

----特点:申请时必须指明长度,一旦申请成功,空间大小不能改变。

	int a = 0;            //向栈空间申请4个字节大小空间
 
	char b = 'a';         //向栈空间申请1个字节空间
 
	char arr[10] ={ 0 }; //向栈空间连续申请10个char类型的大小空间(10个字节)
 
	int s[10] = { 0 };    //向栈空间连续申请10个int类型大小的空间(40个字节)

        在堆区上申请空间(第二种:空间大小可以改变):

 二、动态内存开辟的函数:malloc

函数原型:void* malloc(size_t size);

        1.函数返回类型是void*(指针类型);void*可以指向任何类型的指针;但是void类型指针不是进行解引用,必须进行强制类型转换才能进行解引用;

        2.size是在堆区申请的空间大小,单位是字节;

例如:int *p=(int*)malloc(sizeof(int));

指在堆空间申请大小为4个字节的空间,并把首地址强制类型转换成整形(int)指针,然后赋给整形指针变量p;

        3.头文件:

#include<stdlib.h>

        注意事项:

1.申请(开辟)成功:会返回指向开辟空间的指针;

2.申请(开辟)失败:会返回一个NULL类型的指针,所以一定要对malloc的返回值进行检查;

3.返回值的类型为void*,所以malloc函数只管开辟空间,但是不知道空间的类型;具体在使用的时候由使用者决定;

4.当size为0时;malloc的行为是未被定义的,大小取决于编译器,可能申请成功,可能申请失败;

三、free函数

         c语言中,提供一个一个函数free,用来释放动态内存空间,即申请了动态内存空间,就要去释放动态内存空间。

        函数原型:void free(void * str);<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值