Передача указателя на функцию вызывает ошибку сегментации при попытке получить значение
Я получаю ошибку сегментации со следующим кодом. Я уверен, что это потому, что функция пытается использовать адрес переменной вместо ее значения. Я немного новичок в указателях, поэтому любая помощь будет оценена!
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))) <--- Segementation fault here!
int_error ("Error getting public key from request");
....
}
Используя GDB, после выполнения makecsr я могу напечатать значения priv_key_p и req_p без проблем.
Однако внутри функции create_cert я могу напечатать значение только записав p *priv_key_p / *req_p
ошибка
Program received signal SIGSEGV, Segmentation fault.
0xb7ebb747 in X509_REQ_get_pubkey ()
from /lib/i386-linux-gnu/libcrypto.so.1.0.0
2 ответа
Решение
Ошибка была в том, что я передал неверный тип указателя для req_p в create_cert.
Решением было изменить create_cert на это:
int create_cert(X509 *req_p, X509 **cert, EVP_PKEY **priv_key_p, char * passphrase)
Ваш код:
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");
....