C语言内存血与泪教训——内存使用重要原则

C语言内存血与泪教训——内存使用重要原则

malloc

  • malloc函数使用时一定要包含stdlib.h头文件

    malloc函数原型返回值为void*,

     void *malloc (size_t size);
    

    如果没有包含头文件,函数没有声明就直接使用,那么C语言默认函数的返回值是int型,即如果没有包含头文件,那么malloc函数的原型为:

    int malloc(size_t size);
    

    如果编译成64位的应用程序,那么sizeof(int) = 4并且sizeof(void *) = 8, 比如malloc本来返回的地址为0xFFFFFFFFFFFF1111, 由于没有函数声明,系统默认malloc返回的类型为int,将上面的地址高32位截取后就得到0xFFFF11111,即对malloc返回值的任何操作都是在地址0xFFFF11111上做的。如果0xFFFF1111这个地址不可写,那么就会导致coredump的情况。

    如果编译成32位的应用程序,那么sizeof(int) = sizeof(void*) = 4,所以不会出现coredump问题。

  • malloc函数调用时一定要判断size是否大于0

  • malloc函数调用后一定要判断返回值是否为NULL

free

  • free必须与malloc一一对应,最好的原则就是谁申请的内存由谁释放;在做代码走读时,所有的malloc次数与free次数必须是相等的

  • free结束后一定要将对象设置成NULL,在调用free释放前可以判断对象非NULL才进行释放

memcpy

  • memcpy时一定要比较判断目标内存的长度是否大于源内存的长度,否则将过长的内存拷贝到较小内存区域时就会发生踩栈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

growdu_real

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

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

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

打赏作者

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

抵扣说明:

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

余额充值