2009-12-02 3 views
0

je le code suivant:emplacement d'écriture de violation d'accès

#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; 

Le débogueur me dit que j'ai un problème « emplacement de violation d'accès d'écriture » sur la ligne

key[BN_num_bytes(rsa->n)] = '\0'; 

Si je commenter cette ligne le problème descend juste à

BN_bn2bin(rsa->n, key); 

des suggestions sur la façon de résoudre ce problème serait génial.

+0

clé du pointeur voulez-vous d'allouer de la mémoire à elle? Si c'est la clé = new char [100]; // un tampon – JonH

Répondre

2

Depuis key ne pointe pas vers quoi que ce soit et que vous avez référencé avec tableau indice de notation, c'est la source. Comment la clé obtient-elle la valeur? Vous êtes en train d'écraser ou de piétiner un autre bloc de mémoire qui n'est pas le vôtre, d'où la 'violation d'accès' bloquée par les fenêtres. Vérifiez votre code et assurez-vous que la variable a été malloc'd ou new'd.

Comme une note de côté, il est préférable pour votre santé mentale de le déclarer comme celui-ci

 
unsigned char *key = NULL; 

De cette façon, si vous essayez l'accès key sans être malloc'd/new'd, vous obtiendrez une erreur d'exception de mémoire (qui peut facilement être cloué à cela). Considérez que cela facilite beaucoup le débogage.

Espérons que cela aide, Cordialement, Tom.

1

Vous avez une violation d'accès car vous essayez d'affecter la clé avec le terminateur null mais vous n'avez alloué aucune mémoire pour la clé. Nous aurions besoin de savoir ce que vous essayez d'accomplir.

1

Vous n'êtes pas allouer de la mémoire pour la clé - la première fois qu'il est utilisé est lorsque vous essayez de définir un élément à 0.

0

La bonne solution pour allouer la bonne quantité de mémoire dans ce cas est la suivante:

key = malloc(BN_num_bytes(rsa->n)); 
BN_bn2bin(rsa->n, key); 
+0

Son tag dit C++, n'utilise pas malloc en C++. – JonH

Questions connexes