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的时候, 一般人的第一反应是内存空间不足. 常见的代码为:
有的C编译器对没有声明的函数, 是不报错的(有的连警告都没有, C编译器认为程序员永远是正确的). 糟糕的是, C编译器默认认为函数的返回值是int类型. 如果没有加以下头文件的话:
程序把malloc的返回值强转成int, 然后再转成int*. 于是程序core了 |
|