2014-01-10 47 views
0

我是相當新的編程與開放ssl。這是一個代碼片段,它應該生成一個隨機數,然後轉換爲十六進制格式。 代碼正在編譯,但是當我運行文件時,我得到了分段錯誤:核心轉儲消息。打開SSL蘭德功能

#include<stdio.h> 
#include<iostream> 
#include<openssl/aes.h> 
#include<openssl/bn.h> 
#include<openssl/rand.h> 
using namespace std; 
int main() 
{ 
    int i; 
    void *buf; 
    long *p; 
    *p=67563; 
    buf=p; 
    RAND_seed(buf,9); 
    BIGNUM *rnd 
    i= BN_rand(*rnd, 128,0,0); 
    BN_bn2hex(rnd); 

}

回答

0

您的代碼未初始化的指針!他們很可能會指向無法寫入的無效內存,導致分段錯誤。

關注的變量是prnd

long *p;  // p is not initialized, pointing to invalid memory 
*p = 67563; // Writing to invalid memory => SEGFAULT 

試試這個:

int i; 
void *buf; 

long p; // NO POINTER! 
p=67563; 

buf=&p; // Let buf point to where p is (valid address on stack) 
RAND_seed(buf,9); 

BIGNUM rnd; // NO POINTER! 
i= BN_rand(&rnd, 128,0,0); // Pass pointer to rnd to BN_rand 

BN_bn2hex(&rnd); // Pass pointer to rnd to BN_bn2hex