C中size_t类型的malloc参数的限制是什么? Docs说它有UINT_MAX的
我想分配一个2.9GB的char数组
database = (char*) malloc((2900 * 1000000 * sizeof(char))); 这给出了整数溢出警告,malloc返回NULL.该 所以max应该是UINT_MAX,至少是2.9GB.但是,如果 /usr/include/stdlib.h 和 ./lib/gcc/x86_64-redhat-linux/4.1.1/include/stddef.h 但 解决方法
这里有两个问题.
首先,溢出警告:2900和1000000都是int类型,因此乘以它们的结果也是int类型.结果不能用32位有符号整数表示,因此它会溢出.您需要将一个(或两个)参数强制转换为size_t以使用无符号算术. (或者,您可以将sizeof(char)移动为前两个术语之一,因为它的类型是size_t,但您也可以删除sizeof(char),因为它始终是1.) 其次,malloc可以分配的最大大小取决于您运行的平台和程序的当前状态.如果没有足够的连续地址空间来满足请求,很明显malloc将会失败. 此外,您运行的平台可能有一个上限,它可以动态分配一个对象的大小.您需要查阅平台的文档以了解该上限是什么. size_t肯定不是int,因为int总是有符号的,而size_t总是无符号的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |