violação de acesso local a escrita
Pergunta
Eu tenho o seguinte código:
#include <openssl/bn.h>
#include <openssl/rsa.h>
unsigned char* key;
RSA* rsa = RSA_new();
rsa = RSA_generate_key(1024,65537,NULL,NULL);
//init pubkey
key[BN_num_bytes(rsa->n)] = '\0';
BN_bn2bin(rsa->n, key);
printf("RSA Pub: %s\n", key);
RSA_free( rsa );
rsa = NULL;
O depurador está me dizendo que eu tenho um problema "Violação de acesso de escrita local" na linha
key[BN_num_bytes(rsa->n)] = '\0';
Se eu comentar essa linha a questão apenas se move para baixo para
BN_bn2bin(rsa->n, key);
quaisquer sugestões sobre como corrigir esse problema seria ótimo.
Solução
Desde key
não está apontando para qualquer coisa e você ter referenciado com subscrito notação de matriz, que é a fonte. Como a chave de obter o valor. Está a substituir ou pisando em algum outro bloco de memória que não é seu, portanto, o 'Acesso violação', como preso nas janelas. Verifique o seu código e certifique-se de que a variável tem sido malloc ou new'd.
Como uma nota lateral, é melhor para a sua sanidade declará-la como esta ??p>
unsigned char *key = NULL;
Dessa forma, se você tentar key
acesso sem que seja malloc / new'd, você receberá um erro de exceção de memória (que pode ser facilmente pregado para baixo a este). Considere isso torna a depuração muito mais fácil.
Espero que isso ajude, Cumprimentos, Tom.
Outras dicas
Você tem uma violação de acesso porque você tentar Atribuição de chave com o terminador nulo, mas você não alocou qualquer memória de chave. Precisaríamos saber o que você está tentando realizar.
Você não está alocando qualquer memória para a chave -. A primeira vez que ele é usado é quando você tentar definir um elemento a 0
A solução correta para alocar a quantidade certa de memória neste caso é:
key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);