C语言学习9——动态内存分配

auto类型都存放在栈上。

malloc函数在stdlib.h头文件中,如果看不到原型,返回值默认当作int对待

Malloc   ralloc   realloc    free前三个申请,后面一个释放

原则:谁申请谁释放,防止内存泄漏,malloc和free出现在同一个函数或者模块中

Malloc:

Void *malloc(size_t size)上找一块连续的size字节的大小空间,返回一个空指针。(可以赋值给任何类型的指针)

void类型指针可以给任何指针赋值,任何指针也可以赋给他,但是c99种函数指针与void*赋值是未定义的

Void *calloc(size_t nmemb,size_t size)n块空间,一块空间多少字节

Void *realloc(void *ptr,size_t size)重新分配空间,新大小,ptr必须是malloc或者calloc返回的地址。自动增减或者从新找释放原来的。

※定义指针时不知指向最好先指向空,后面再赋值

malloc申请数组:申请连续空间,可变长空间(即将数据类型大小*个数)

※free空指针什么都不执行,但是也不会报错。注意free需要释放的是申请的首地址地址。

        对于函数传递的指针在函数内申请空间的,注意要么传递二级指针,要么返回申请的地址达到释放,形参传递给实参只是拷贝了一份,拷贝的部分知道申请的地址在哪,不然原函数会不知释放哪里的内存。

在free后马上对指针进行指向NULL操作,防止该指针变为野指针(野指针(dangling pointer)是指指向已经释放或者无效的内存地址的指针),该地址已经不是该程序所能掌控的地址,可能其他程序在该地址跑,而野指针依旧指向他,试图改变会造成程序崩溃的可能。!!!

如果还要继续使用该指针的话,最好指向NULL后重新分配空间,同时慎用realloc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值