C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C中size_t类型的malloc参数的限制是什么? Docs说它有UINT_MAX的上限但我不能超越INT_MAX大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想分配一个2.9GB的char数组

database = (char*) malloc((2900 * 1000000 * sizeof(char)));

这给出了整数溢出警告,malloc返回NULl.该@H_512_10@malloc参数的类型为size_t,根据文档的类型
unsigned int.

所以max应该是UINT_MAX,至少是2.9GB.但是,如果
我尝试分配超过MAX_INT的malloc失败.这是否意味着
我的系统上的size_t是int类型?我该如何检查?我看了看

/usr/include/stdlib.h

./lib/gcc/x86_64-redhat-linux/4.1.1/include/stddef.h


找不到size_t的定义.非常感谢

解决方法

这里有两个问题.

首先,溢出警告:2900和1000000都是int类型,因此乘以它们的结果也是int类型.结果不能用32位有符号整数表示,因此它会溢出.您需要将一个(或两个)参数强制转换为size_t以使用无符号算术.

(或者,您可以将sizeof(char)移动为前两个术语之一,因为它的类型是size_t,但您也可以删除sizeof(char),因为它始终是1.)

其次,malloc可以分配的最大大小取决于您运行的平台和程序的当前状态.如果没有足够的连续地址空间来满足请求,很明显malloc将会失败.

此外,您运行的平台可能有一个上限,它可以动态分配一个对象的大小.您需要查阅平台的文档以了解该上限是什么.

size_t肯定不是int,因为int总是有符号的,而size_t总是无符号的.

大佬总结

以上是大佬教程为你收集整理的C中size_t类型的malloc参数的限制是什么? Docs说它有UINT_MAX的上限但我不能超越INT_MAX全部内容,希望文章能够帮你解决C中size_t类型的malloc参数的限制是什么? Docs说它有UINT_MAX的上限但我不能超越INT_MAX所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。