动态内存的开辟与常见错误

***1.***为什么要有动态内存
如果是单纯创建已创建数组的方式来存放数据,可能存在大小不够或者太大了浪费空间,若空间大小可以随着我们的使用随意增大减小就非常方便。

***2.***动态内存的函数有哪些
动态内存的函数共有四个
malloc calloc realloc free
这四个函数的头文件都是<stdlib.h>

***3.***四个动态内存函数的具体参数与使用

malloc:
分配内存的字节数块,返回指向该块开头的指针。
新分配的内存块的内容未初始化,仅保留不确定的值

void* malloc (size_t size);

参数就是需创建的空间大小 单位是字节
注意返回值是void* 需要强制类型转换成想要的类型
例:

int *a=(int *)malloc(5*sizeof(int));

这样就开辟了五个int大小的空间

calloc:
分配和零初始化数组
为元素数组分配一个内存块,每个元素的长度为字节,并将其所有位初始化为零。

void* calloc (size_t num, size_t size);	

参数为 需要分配元素的个数 需要分配的元素类型的大小单位也是字节
注意返回值是void* 需要强制类型转换成想要的类型
例:

int *a=(int *)calloc(5sizeof(int));

这样就开辟了五个int大小的空间 并且每个元素都初始化为0
(malloc 与 calloc 差异不大 主要是初始化问题 根据自己的需求选择使用就可以)

realloc:
重新分配内存块
更改 所指向的内存块的大小。
该函数可能会将内存块移动到新位置(该位置的地址由函数返回)。

void* realloc (void* ptr, size_t size);

这个函数可以改变前两个函数创建的数组的大小
参数 第一个参数为需要改变的动态内存的起始位置(若传入空指针 则和malloc效果一样且不会初始化为0)
第二个参数为希望修改后的空间的大小
例:

int*a=(int *)realloc(NULL,5*sizeof(int));

free:
解除分配内存块
先前由 调用 或 分配的内存块,使其再次可用于进一步分配,如果不指向使用上述函数分配的内存块,则会导致未定义的行为,如果 为空指针,则该函数不执行任何操作。

void free (void* ptr);

这个函数参数就是需要被释放的空间的起始地址 (也可以是NULL 函数不执行操作)
每次申请的动态内存在使用以后都需要free

动态内存在的错误:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值