从分配函数返回一个指针 [英] Assigning a pointer returned from a function

查看:383
本文介绍了从分配函数返回一个指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆