【发布时间】:2021-11-28 17:20:13
【问题描述】:
我有一个 SHA1 哈希函数,它返回一个 20 个字符的数组,不幸的是它没有将它存储在任何地方有没有办法将此返回值存储在数组中。以下是我到目前为止所拥有的。我收到一条警告说..
C6011:取消引用 NULL 指针“SHA1_Hash”
uint8_t* SHA1_Hash;
SHA1_Hash[20] = util_sha1_finalize(&AuthContext, SHA1_Hash);
【问题讨论】:
-
你能告诉我们
util_sha1_finalize是如何定义的吗? “返回数组”的方法不止一种。 -
仅供参考,对于 20 个元素的数组,
array[20]超出范围。 -
SHA1_Hash[20]访问数组中不存在的第 21 个元素。它不会调整数组大小或您认为想要它做的任何事情。SHA1_Hash = util_sha1_finalize(&AuthContext, SHA1_Hash);将从函数返回的已分配给您的指针。 -
NULL 指针错误的原因是老天对你微笑,未初始化的变量
SHA1_Hash碰巧指向 NULL,这是一个易于测试的停车位,用于存放未指向有效对象的指针。您可以很容易地发现它指向程序存储的有效块,并覆盖发生在那里的任何内容。错误的代码看起来像是可以工作的,并且将来某个时候一些无辜的代码行会崩溃或吐出错误的答案。有时很难找到这样的错误。