我有一个覆盖偏转要修复,但我不确定。我有一个函数 ( void my_function(a_type *my_variable)
) 有以下有问题的代码行:
body = malloc(strlen(&((my_type*) *my_variable)->Param2.body[1]) +1);
哪里body
是unsigned char*
。
覆盖率消息:
String length miscalculation (BAD_ALLOC_STRLEN)
Using "strlen(((my_type *)*my_variable)->Param2.body + 1)"
instead of "strlen(((my_type *)*my_variable)->Param2.body) + 1"
as an argument to "malloc" might be an under-allocation.
现在,给定strlen
函数调用,如下所示:
strlen(&((my_type*) *my_variable)->Param2.body[1])
这一行等同于:
strlen(&((my_type*) *my_variable)->Param2.body + 1)
所以这应该根据消息进行更改,结果将是:
body = malloc((strlen(&((my_type*) *my_variable)->Param2.body)+1) +1);
为什么不好这样的论点malloc
?我看不出这里的实际问题是什么,所以我不确定这个解决方案和/或其必要性。
附加信息是,&((my_type*) *my_variable)->Param2.body[1]
(简单地&Param2.body[1]
)将被复制到body
using 中strcpy
,例如:
strcpy(body, &((my_type *) *my_variable)->Param2.body[1]);