【发布时间】:2018-02-02 21:05:47
【问题描述】:
我在调用 malloc 或 realloc 的代码中的多个位置收到此错误消息。这是一个例子。
void* reallocate_array(void* ptr, size_t size)
{
return realloc(ptr,size)
}
EDIT2:看起来问题出在测试用例中。我不能修改这个
char* reallocated = (char*) reallocate_array(allocated,-1)
这是我的解决方案,它摆脱了可疑的值错误
if((int)size < 0)
{
return NULL;
}
我的印象是 size_t 是一个无符号整数,这意味着它永远不会是负数。这可能是 Valgrind 中的错误,还是警告我可能的环绕?
编辑:Valgrind 输出
==20841== 1 errors in context 1 of 3:
==20841== Argument 'size' of function realloc has a fishy (possibly negative) value: -1
==20841== at 0x4C2BB78: realloc (vg_replace_malloc.c:785)
==20841== by 0x4057B1: reallocate_array (allocation.c:24)
==20841== by 0x402A8A: reallocate_NegativeBytes_Test::TestBody() (tests.cpp:56)
【问题讨论】:
-
它说可能是负面的,鱼腥味可能意味着别的东西。此外,您应该改为显示呼叫。
-
它闻到了一个可能由整数溢出(或其他错误)导致的可疑值,并让您知道。你最好检查一下。
-
没有。这意味着您应该检查代码是否存在错误。
size的任何值都是合法的。有些只是怀疑。 -
这意味着您需要检查
reallocate_array的调用位置,以查看传入的内容。 -
在使用负值调用 reallocate_array 时是否收到警告,它声明为采用
size_t- 即无符号