C – 重新编码malloc()如何检测调用中使用的负大小?

C – 重新编码malloc()如何检测调用中使用的负大小?,第1张

概述参见英文答案 > what happens when we call Malloc with negative parameter?                                    2个 我正在重新编码malloc()并需要处理调用者进行缓冲区大小计算导致负值然后传递给malloc()的情况? 我知道参数是size_t,所以unsigned int我是对的吗? 这样,我想检查 参见英文答案 > what happens when we call Malloc with negative parameter?                                    2个
我正在重新编码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()如何检测调用中使用的负大小?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1216489.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存