gpt4 book ai didi

c - 分配从函数返回的指针

转载 作者:太空狗 更新时间:2023-10-29 15:52:30 24 4
gpt4 key购买 nike

我有一个看起来像这样的程序:

EVP_PKEY *generate_RSA_key_and_uuid(unsigned char uuid[16])
{
EVP_PKEY *key_p;
key_p = EVP_PKEY_new();
return key_p;
}

int build_and_save_csr(int dn_entries, X509_REQ *req_p, EVP_PKEY *priv_key_p, char *passphrase)
{
priv_key_p = generate_RSA_key_and_uuid(uuid);
}

int makecsr(X509_REQ *req_p, EVP_PKEY *priv_key_p, char *passphrase)
{

if (build_and_save_csr(2, req_p, priv_key_p, passphrase) != 0) {
fprintf(stderr, "Could not create csr file / private key...\n");
exit(1);
}

return 0;
}

int main(int argc, char *argv[])
{

EVP_PKEY *priv_key_p;
X509_REQ *req_p;

makecsr(req_p, priv_key_p, passphrase);
return 0;
}

运行后,*priv_key_p 应包含从 *generate_RSA_key_and_uuid 返回的值。

在 gdb 中,我可以看到在 generate_RSA_and_uuid 的末尾 key_p 包含正确的值,但在 priv_key_p = generate_RSA_key_and_uuid(uuid); 之后> 已执行,priv_key_p 为空。

有人知道如何正确地将值赋给指针吗?

最佳答案

您需要一个额外的间接级别,否则您只是修改指针的本地副本而不会返回任何内容:

int build_and_save_csr(int dn_entries, X509_REQ *req_p, EVP_PKEY **priv_key_p, char *passphrase)
{
*priv_key_p = generate_RSA_key_and_uuid(uuid);
}

int makecsr(X509_REQ *req_p, EVP_PKEY **priv_key_p, char *passphrase)
{
if (build_and_save_csr(2, req_p, priv_key_p, passphrase) != 0) {
fprintf(stderr, "Could not create csr file / private key...\n");
exit(1);
}
return 0;
}

int main(int argc, char *argv[])
{
EVP_PKEY *priv_key_p;
X509_REQ *req_p;

makecsr(req_p, &priv_key_p, passphrase);
return 0;
}

或者,您可以使用函数结果(正如您在 generate_RSA_key_and_uuid() 中所做的那样)返回指针(可能在错误时返回 NULL)——这消除了对额外级别的需要间接。

关于c - 分配从函数返回的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com