分享

malloc出错小结

 海漩涡 2016-05-12




1、内存訪问越界导致破坏了heap的数据结构
(1)p = malloc(20)
    memset(p,)
    
       memset(p, 0x00, 20*2);
               malloc(BUF_SIZE); // <==== 内存分配失败

    或
    p[20] = '\0';
    malloc(BUF_SIZE); // <==== 内存分配失败


=================================================================


2、进程内没有一块内存大于你要求的尺寸,虽然内存剩余空间总量大于你的申请,因为内存碎片过多。
分配就失败。

================================================================


3、在C语言中, 执行到malloc程序core的时候, 一般人的第一反应是内存空间不足. 常见的代码为:
  1. #define SIZE 100  

  2. int* p = (int*)malloc(SIZE * sizeof(int));  

但是, 事实情况是: 内存还多的很.

有的C编译器对没有声明的函数, 是不报错的(有的连警告都没有, C编译器认为程序员永远是正确的). 糟糕的是, C编译器默认认为函数的返回值是int类型. 如果没有加以下头文件的话:

  1. #include <stdlib.h>  


程序把malloc的返回值强转成int, 然后再转成int*. 于是程序core了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多