8.14 我用一行这样的代码分配一个巨大的数组, 用于数字运算:  double *array = malloc(300 * 300 * sizeof( double ));  malloc() 并没有返回 null, 但是程序运行得有些奇怪, 好像改写了某些内存, 或者 malloc() 并没有分配我申请的那么多内存, 云云。

注意 300 * 300 是 90,000, 这在你乘上 sizeof(double) 以前就已经不能放 入 16 位的 int 中了。 如果你需要分配这样大的内存空间, 你可得小心为妙。 如果在你的机器上 size_t (malloc() 接受的类型) 是 32位, 而 int 为 16 位, 你可以写 300 * (300 * sizeof(double)) 来避免这个问题。 (参见问题 3.11)。否则, 你必须把你的数据结构分解为更小的块, 或者使用 32 位的机器或编译器, 或者使用某种非标准的内存分配函数。 参见问题 19.27

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)