
我正在重新编码malloc()并需要处理调用者进行缓冲区大小计算导致负值然后传递给malloc()的情况?
我知道参数是size_t,所以unsigned int我是对的吗?
这样,我想检查将传递给我的recoded malloc()的大小,但我该怎么办?
因为如果我传递一个负参数,它将被改为一个随机数,如18446744073709551613我得到.
所以我的问题是:当参数是size_t(unsigned int)时,如何检查参数是否为负,它将直接转换为天文值,不是吗?
解决方法 通常,所有大小计算都是一个好主意,其中使用带符号的数字类型从另一个值中减去一个值,允许检查负值.虽然malloc()的原型调用size_t是无符号值,但您可以传递一个带符号的值,编译器将为您执行非常简单的转换.对于任何类型的缓冲区大小计算,这是我遵循的一般规则.如果使用带符号变量进行计算,则很容易检测到缓冲区大小计算问题.
你写下你的问题“因为如果我传递一个否定参数,如18446744073709551613我得到的.”这不是真的.大数字是负值的无符号表示.这不是随机的.
另一种选择是对值进行边界检查.例如,您可以检查size_t的值是否大于0x7ffffff,这是最大的32位有符号值和非常大的缓冲区大小.在我使用的计算机上,表示为unsigned的负值将是大于0x8000000的数字.
总结以上是内存溢出为你收集整理的C – 重新编码malloc()如何检测调用中使用的负大小?全部内容,希望文章能够帮你解决C – 重新编码malloc()如何检测调用中使用的负大小?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)