C 在尝试检索值时,将指针传递给函数会导致分段错误

C 在尝试检索值时,将指针传递给函数会导致分段错误,c,pointers,openssl,segmentation-fault,memory-address,C,Pointers,Openssl,Segmentation Fault,Memory Address,我在下面的代码中遇到了一个分段错误。我很确定这是因为函数试图使用变量的地址而不是它的值。我对指针有点陌生 int main(int argc, char *argv[]) { EVP_PKEY priv_key_p; X509_REQ req_p; X509 cert; PKCS7 pkcs7; /*Need to store value in req_p and priv_

我在下面的代码中遇到了一个分段错误。我很确定这是因为函数试图使用变量的地址而不是它的值。我对指针有点陌生

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

    EVP_PKEY        priv_key_p;
    X509_REQ        req_p;
    X509            cert;
    PKCS7           pkcs7;

        /*Need to store value in req_p and priv_key_p*/
    makecsr(&req_p, &priv_key_p, passphrase);

        /*Need to use value of req_p and priv_key_p*/
    create_cert(&req_p, &cert, &priv_key_p, passphrase);
}


int create_cert(X509_REQ *req_p, X509 *cert, EVP_PKEY *priv_key_p, char *passphrase)
{
    int i;
    long serial = 1;
    EVP_PKEY *pkey;
    const EVP_MD *digest;
    X509_NAME *name;
    X509V3_CTX ctx;

    /* verify signature on the request */
    if (!(pkey = X509_REQ_get_pubkey (req_p))) <--- Segmentation fault here!
        int_error ("Error getting public key from request");
    ....
}
您的代码:

if (!(pkey = X509_REQ_get_pubkey (req_p))) <--- Segementation fault here!
    int_error ("Error getting public key from request");
    ....

if(!(pkey=X509_REQ_get_pubkey(REQ_p))错误是因为我将REQ_p的指针类型传入了create_cert

解决方案是将create_cert更改为:


int create\u cert(X509*req\u p,X509**cert,EVP\u PKEY**priv\u key\u p,char*passphrase)

你能解释一下你的代码吗,我是说你的变量是什么类型的吗。在目前的状态下,很难回答这个问题。
X509\u REQ\u get\u pubkey(&REQ\u p)
试试这个。(暗中拍摄)类型来自,没有&REQ\p的运气。您可以提供创建CSR:makecsr的函数的代码吗?我猜这个错误可能来自这里,你应该指出第一个赋值给pkey,而第二个赋值给pkey。如果没有它们,很难看到区别。错误在
X509\u REQ\u get\u pubkey(REQ\u p)
不幸的是,事实并非如此。您的create_cert应该保持不变,makecsr中的intern函数只需修改即可。(正如在前面的评论中提供的链接中一样!)
if (!(pkey = X509_REQ_get_pubkey (req_p))) <--- Segementation fault here!
    int_error ("Error getting public key from request");
    ....
if (!(pkey == X509_REQ_get_pubkey (req_p))) <--- Segementation fault here!
    int_error ("Error getting public key from request");
    ....