c语言分配内存方式以及常见内存错误

 三种内存分配方式:
   1:从静态存储区分配:全局变量,static变量
   2:从栈分配:局部变量,函数参数
   3:从堆分配(动态内存分配):使用malloc或者new操作符(c++)

  常见的内存错误:
    1:内存分配未成功
     使用p==NULL来判断是否为空可以避免这个问题或者使用异常处理语句来处理错误
    分配未成功可能是堆内存不够用(内存肯定是够用的,所以这个问题很少出现),最大的可能就是在此malloc之前的malloc分配的内存访问出现了越界

     2:分配成功但是没有初始化
     全局变量和静态变量以及数组会自动初始化为0,但是其他类型的数据就是随机系统初始化的,时刻保持一种习惯,创建变量的同时就赋空或者0

     3:内存分配成功,但是操作越界,比如在排序算法循环中,经常没有控制好循环控制变量就很容易出现越界
 
     4:忘记了释放内存或者释放了部分内存,造成内存泄漏。开始的时候觉得没有什么,当多次出现这个情况就会出现oom
      动态分配的内存 malloc和free配对,new delete配对,java中比如各种流打开也要配对关闭,不要太指望gc会自己处理,他只是个机器。


     5:释放了内存却还在继续使用
      常见的为函数返回指向“栈内存”的指针或者是引用,它使局部作用的变量,函数结束就会自动释放了

     6:释放了内存,但是没有重新滞空,产生野指针!
     free只是释放了该指针指向的内存,但是它作为一个独立的变量还是会存在的,不给他赋值他就乱指形成野指针。

     7:误以为动态分配的内存会自动释放(很容易忽略!)
  void funTest(){
    char *p=(char *)malloc(100);
  }
  调用该函数后分配的指针变量p为局部变量会自动释放,但是他指向的内存并不会释放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值