C – 重新编码malloc()如何检测调用中使用的负大小?
发布时间:2020-12-16 09:56:26 所属栏目:百科 来源:网络整理
导读:参见英文答案 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的数字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |