从分配函数返回一个指针 [英] Assigning a pointer returned from a function
问题描述
我有一个程序,它看起来像这样:
I have a program which looks like this:
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
返回的值。
After this has run, *priv_key_p
should contain the value returned from *generate_RSA_key_and_uuid
.
在gdb的,我可以看到,在 generate_RSA_and_uuid
的 key_p
的末尾包含正确的值,但在 priv_key_p = generate_RSA_key_and_uuid(UUID);
已执行, priv_key_p
为空
In gdb, I can see that at the end of generate_RSA_and_uuid
that key_p
contains the correct value but after priv_key_p = generate_RSA_key_and_uuid(uuid);
has executed, priv_key_p
is empty.
有谁知道如何正确值分配给指针?
Does anybody know how to properly assign the value to the pointer?
推荐答案
您需要额外的间接水平,否则你只是修改指针的本地副本没有东西返回:
You need an extra level of indirection, otherwise you're just modifying local copies of the pointers and nothing gets returned:
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) - 这个出手的需要间接的额外级别。
Alternatively you can use the function result (as you do already in generate_RSA_key_and_uuid()
) to return the pointer (perhaps return NULL on error) - this gets rid of the need for the extra level of indirection.
这篇关于从分配函数返回一个指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!