C和指针_第11章_动态内存分配_学习笔记

2.内存分配

void *malloc( size_t size );
void free( void *pointer);

    malloc(stdlib.h)的参数是需要分配的内存字节(字符)数。如果内存池的可用内存可用满足这个需求,返回一个指向被分配的连续的内存块的起始位置的指针。如果内存池为空,或者可用内存不足满足要求,操作系统会返回一个一个NULL指针。对于要求边界对齐的机器,malloc返回的内存的起始位置将始终满足对边界对齐要求最严格的类型的要求。

    free的参数只能是NULL或malloc、calloc、realloc返回的值。向free传递一个NULL参数不产生任何效果。

  

3.calloc和realloc

void *calloc( size_t num_elements, size_t element_size );
void *realloc( void *ptr, size_t new_size );

    calloc的第一个参数为所需元素的数量,第二个参数为单个元素的字节数,其与malloc的最大区别在于calloc会在返回指向内存块的指针之前将内存块初始为0。

    realloc用于修改一个原先已经分配的内存块的大小。如果用于扩大内存块,那么这个内存块原先的内容将保留,新添加的内存添加到原先内存块的后面,新内存不以任何方式初始化;如果用于缩小内存块,该内存块尾部的部分便被拿掉,但剩余的内存块的原先内容将保留;如果原先内存块无法改变大小,realloc将分配另一块正确大小的内存,并将原先内存块的内容复制到新的内存块上。如果第一参数为NULL,则行为与malloc一模一样。


5.常见动态内存错误

注意:

    1.对NULL指针进行解引用

    2.对分配的内存进行操作时越过边界

    3.释放非动态分配的内存

    4.试图释放一块动态分配的内存的一部分

    5.一块动态内存被释放后继续使用

    6.分配内存但使用完毕后不释放(内存泄漏memory leak)

警告:动态内存分配后应检查所请求的内存是否成功分配。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值