2013-02-13 51 views
1

我想使用mpz_import方法將64位整數加載到gmp中,我知道我可以通過將數字流送到一個字符串然後使用賦值運算符來實現此目的,但這無疑是較慢和次優。在gmp庫中調用mpz_import期間發生Segfault

此代碼在運行OSX的64位MacBook上運行良好,但運行Raspbian,32位Ubuntu Server和64位Linux Mint的樹莓派上的分段故障失敗,都在mpz_import行上失敗。

下面的代碼,用gcc 4.7 g++ -std=c++11 -lgmp -lgmpxx main.cpp

#include <iostream> 
#include <cstdint> 
#include <gmp.h> 
#include <gmpxx.h> 

using namespace std; 

int main() 
{ 
    mpz_t a; 
    int64_t b = 4; 
    mpz_import(a, 1, 1, sizeof(b), 0, 0, &b); //segfault on this line 
    mpz_class c(a); 
    cout << c << endl; 
} 

回答

2

您需要mpz_import使用前mpz_init編譯。來自documentation

unsigned long a[20]; 
/* Initialize z and a */ 
mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); 
相關問題