2009-12-02 5 views
0

나는 다음과 같은 코드가 있습니다위치를 기록하는 동안 액세스 위반이

#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; 
디버거 내게 말하고있다

내가 선

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

에 문제 "액세스 위반 쓰기 위치"를 가지고 내가 주석 경우를 그 줄이 바로 아래로 이동

BN_bn2bin(rsa->n, key); 

이 문제를 해결하는 방법에 대한 제안 사항은 다음과 같습니다. 좋아.

+0

키의 포인터 당신이 그것에 어떤 메모리를 할당 하시겠습니까? 그렇다면 key = new char [100]; // some buffer – JonH

답변

2

아무것도 연결되지 않습니다에 요소를 설정하려고하고 배열을 참조한 때 사용되는 처음이다 소스 인 표기법 첨자. 열쇠는 어떻게 가치를 얻습니다. 당신은 다른 메모리 블록을 덮어 쓰거나 짓밟 았기 때문에 당신이 아니기 때문에 창에 덫을 놓은 것처럼 '액세스 위반'이됩니다. 코드를 다시 확인하고 변수가 malloc'd 또는 new'd인지 확인하십시오. 보조 노트로

, 그것은 당신이/new'd malloc이되지 않고 액세스 key을하려고하면 그 방법이

 
unsigned char *key = NULL; 

처럼 선언하는 당신의 정신에 가장, 당신은 얻을 것이다 메모리 예외 오류 (이 오류는 쉽게 해결할 수 있습니다). 디버깅이 훨씬 쉬워 진다고 생각해보십시오.

호프가 도움이 되었으면 안녕하세요, 탐.

1

null 종결 자로 키를 할당하려고했으나 키에 대한 메모리를 할당하지 않았기 때문에 액세스 위반이 있습니다. 우리는 당신이 성취하려는 것을 알아야합니다.

1
당신은 키에 대한 메모리 할당되지 않은

- 당신이 0 key 이후

0

이 경우 메모리의 적당한 양을 할당 할 수있는 올바른 솔루션입니다 :

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

그의 태그는 C++에서 malloc을 C++로 사용하지 말라고했습니다. – JonH

관련 문제