【问题标题】:Storing the return of a function into an array将函数的返回值存储到数组中
【发布时间】: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,这是一个易于测试的停车位,用于存放未指向有效对象的指针。您可以很容易地发现它指向程序存储的有效块,并覆盖发生在那里的任何内容。错误的代码看起来像是可以工作的,并且将来某个时候一些无辜的代码行会崩溃或吐出错误的答案。有时很难找到这样的错误。

标签: c++ arrays pointers


【解决方案1】:

这部分取消引用可能为 NULL 的指针:

SHA1_Hash[20]

这段代码很可疑,但您可以将哈希函数的返回值保存在另一个变量中,或者您可以在函数之外初始化和检查指针值。在此处查看有关警告的更多详细信息https://docs.microsoft.com/en-us/cpp/code-quality/c6011?view=msvc-160

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2021-04-19
    相关资源
    最近更新 更多