prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.16

Q我正在为一些数值计算分配一个大数组,使用了以下语句:

	double *array = malloc(300 * 300 * sizeof(double));
malloc没有返回 null,但程序行为异常,就好像它覆盖了内存,或者malloc没有分配我要求的那么多,或者诸如此类的。


A请注意,300 x 300 等于 90,000,这无法放入一个 16 位int中,甚至在你乘以sizeof(double)之前。如果你需要分配这么大的内存,你必须小心。如果size_t(由malloc接受的类型)在你的机器上是 32 位类型,但int是 16 位,你可能可以通过编写300 * (300 * sizeof(double))(参见问题 3.14)。否则,你将不得不将你的数据结构分成更小的块,或者使用 32 位机器或编译器,或者使用一些非标准的内存分配函数。另请参见问题 7.1519.23


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管