这个 OpenSSL 函数是否会失败?

Does this OpenSSL function ever fail?

我想在我的代码中使用 OpenSSL 函数 EVP_MD_CTX_new。此函数的 documentation 仅声明它“分配并 returns 一个摘要上下文”。由于此函数分配内存,我假设它 可以 失败,但文档没有说明这是否属实,以及失败时 return 的值是多少.

我对 C 编程有些陌生,对我来说,这个函数的接口似乎没有完全指定。在这种情况下,程序员该怎么办?我应该如何测试失败?我应该测试 NULL 吗?如果是,他们到底为什么不明确说明?

感谢您的想法。

额外的(更一般的)问题:不用说,这个特定的函数(和库)只是我遇到的许多类似示例之一。到目前为止,我的经验是许多 C 函数的接口在某些方面没有完全指定。更多资深C程序员如何处理这些情况?我们应该依赖惯例吗?或者可能深入研究我们使用的库的代码以查看行为是什么?

您可以假设 C 中的一个函数分配一个对象并失败 returns NULL,在这种情况下它只是调用 OPENSSL_zalloc。 manual 指定 OPENSSL_zalloc returns NULL on Error.

它们在这方面并不明确,因为假设每个人都知道创建对象并失败的函数 returns NULL。这是一个很常见的约定。

digest.c.

中的实现
EVP_MD_CTX *EVP_MD_CTX_new(void)
{
    return OPENSSL_zalloc(sizeof(EVP_MD_CTX));
}