Accesso posizione di scrittura violazione
Domanda
Ho il seguente codice:
#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;
Il debugger mi sta dicendo che ho un problema di "Violazione di accesso scrittura posizione" sulla linea
key[BN_num_bytes(rsa->n)] = '\0';
Se io commento che la linea la questione si sposta solo fino a
BN_bn2bin(rsa->n, key);
qualche suggerimento su come risolvere questo problema sarebbe grande.
Soluzione
Dato key
non punta a nulla e vi hanno fatto riferimento con la notazione di matrice indice, che è la fonte. Come funziona chiave ottenere il valore. Stai sovrascrivendo o calpestando qualche altro blocco di memoria che non è tuo è qui il 'violazione di accesso', come chiusura di un finestrino. Doppia controllare il codice e fare in modo che la variabile è stata malloc'd o new'd.
Come nota a margine, è meglio per la vostra sanità mentale di dichiararla come questo
unsigned char *key = NULL;
In questo modo, se si tenta key
accesso senza che sia malloc'd / new'd, si otterrà un errore di eccezione di memoria (che può essere facilmente inchiodato a questo). Si consideri rende il debugging molto più facile.
Spero che questo aiuti, I migliori saluti, Tom.
Altri suggerimenti
Hai una violazione di accesso perché si tenta di assegnare chiave con il terminatore null, ma non è stato assegnato alcun ricordo per la chiave. Avremmo bisogno di sapere cosa si sta cercando di realizzare.
Non assegnano la memoria per il tasto -. La prima volta che viene utilizzato è quando si tenta di impostare un elemento a 0
La soluzione corretta per allocare la giusta quantità di memoria in questo caso è:
key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);