2014-04-28 1 views
0

J'apprends le C et je l'ai testé en utilisant une bibliothèque - la bibliothèque openssl pour être exacte. J'ai réussi à faire fonctionner la fonction SHA. Puis, lorsque j'ai déplacé le code de travail (posté ci-dessous) en dehors de la méthode principale vers une méthode que j'ai appelée (littéralement le même code), cela a créé une erreur de segmentation lorsque j'ai essayé de l'exécuter. Je pensais avoir compris que les erreurs de segmentation se produisaient lorsque nous essayons d'accéder à des emplacements mémoire inaccessibles. Mais je suis confus ici - le code est identique! Toute aide s'il vous plaît?Erreur de segmentation lors du déplacement du code en dehors de main()

Répondre

0

Je suppose que le problème est que result est censé stocker la sortie, mais c'est juste un pointeur non initialisé.

Selon the documentation:

SHA1() calcule le message SHA1 des octets n à d et le place dans md (qui doit avoir l'espace pour SHA_DIGEST_LENGTH == 20 octets de sortie). Si md est NULL, le résumé est placé dans un tableau statique.

Vous aurez envie de faire quelque chose comme ceci:

unsigned char *result = malloc(SHA_DIGEST_LENGTH); 
// make sure to free(result) eventually 

Ou tout simplement le faire sur la pile si vous voulez que ce soit plus simple et ne pas besoin de retourner le résultat.

unsigned char result[SHA_DIGEST_LENGTH]; 

il a travaillé très probablement avant parce que result vient de se passer pointer à un emplacement de mémoire que votre programme a été autorisé à accéder.

+0

merci, travaillé comme vous l'avez suggéré! – user3475774

Questions connexes