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");
....