c生万物之动态内存管理

当有时候我们需要的空间大小在程序运行时才能知道,那么数组编译时开辟空间的方式就不能满足了。

malloc和free

void *malloc(size_t size);

这个函数会申请一块连续可用的空间,并返回指向这块空间的指针。

如果开辟失败,返回NULL指针,如果size为0,这个函数未定义,取决于编译器。

void *free(void* ptr);

如果ptr指的空间不是动态开辟的,那free函数的行为未定义。

如果ptr为NULL指针,则free函数什么都不做。

malloc和free都声明在stdlib.h头文件中。

calloc

void *calloc(size_t num,size_t size);

为num个大小为size的元素开辟一块空间,并将空间每个字节初始化为0,这也是与malloc的区别。

realloc

relloc让动态内存管理更加灵活

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

ptr是要调整的内存地址,size是调整之后的新大小,返回跳整之后的新地址,会将原来内存中的数据移动到新的空间。

跳整内存空间有两种情况

1.原有空间足够大,会直接在后面追加。

2.原有空间不够,会重新找一块空间。

动态内存错误要注意一下几点

1.对NULL指针的解引用操作

2.对动态开辟空间的越界访问

3.对非动态开辟内存使用free释放

4.使用free释放一块动态开辟内存的一部分

5.对同一块内存多次释放

6.动态开辟忘记释放(内存泄漏)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是懒大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值