malloc() 函数只能分配(64K 减 1 个字节)的内存,
原因如:
先看 malloc() 函数定义的原型(定义在 malloc.h 头文件内,在 stdlib.h 有同样的定义):
void *_Cdecl malloc (size_t size);
malloc() 函数只带一个参数 size,参数的类型是 size_t,size_t 类型其实是 unsigned int 类型(stdlib.h 头文件中可以找到它的声明处)
int 类型在 Turbo C 2.0 下为 2 字节,unsigned int 可表示值的范围是 0 至 65535,即可说明 malloc() 函数只允许分配 0 至 (64KB - 1字节) 的内存,其实这并非特意安排或者因为 int 类型的巧合,而是因为DOS每单位段大小就是 64KB。若要分配更大的内存空间,可使用远堆分配函数 farmalloc() 函数,它允许分配的内存最高约为 2GB。
需要注意的是:不要让 size 为 0,虽然程序这并不报错,还有就是,size 参数赋给一个负数(如 malloc(-1))也语法是正确的,然而,size 的类型为无符号整型,-1 转换为 unsigned int 后将是一个非常大的正数值。
malloc() 分配的内存由调用者手动去释放(使用 free() 函数),若意外情况或者根本没有检查手动分配的内存是否释放,那将引起最常见的内存泄露问题。