2009-12-02 107 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]; //一些緩衝區 – JonH 2009-12-02 16:44:50

回答

2

由於key沒有指向任何東西,你有數組引用它註釋下標,即源。鑰匙如何獲得價值。您正在覆蓋或踐踏其他不屬於您的內存塊,因此被窗戶困住的「訪問衝突」。仔細檢查你的代碼,並確保該變量已經malloc'd或new'd。

作爲一個側面說明,它是最適合你的理智這樣

 
unsigned char *key = NULL; 

聲明它這樣一來,如果您嘗試訪問key沒有它被malloc分配/ new'd,你會得到一個內存異常錯誤(可以很容易地指出這一點)。考慮它使調試更容易。

希望這會有所幫助, 最好的問候, 湯姆。

1

,因爲你嘗試分配與空終止關鍵,但你有沒有分配給關鍵任何內存您有一個訪問衝突。我們需要知道你在努力完成什麼。

1

您還沒有分配的關鍵任何記憶 - 這是第一次使用是當你嘗試的元素設置爲0。

0

正確的解決辦法來分配在這種情況下的內存適量是:

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

他的標籤說C++,不要在C++中使用malloc。 – JonH 2009-12-03 16:13:59