2017-02-14 12 views
2

GMPのマニュアルによれば、「整数演算のための関数はすべての整数オブジェクトが初期化されていると仮定していますが、関数mpz_initを呼び出すことによって行います。例えばGMPの変数の初期化

int main(){ 
    mpz_t n1, n2, result; 
    mpz_init_set_str(n1, "465860", 10); 
    mpz_init_set_str(n2, "167", 10); 
    mpz_init(result); 
    mpz_mod(result, n1, n2); 
    mpz_out_str(stdout, 10, result); 
    return 0; 
} 

あなたは上記のコードからmpz_init(result);を削除する場合は、コンパイラがセグメンテーションフォールトエラーが生成されます。だから、私の質問は、正確にこれらの2つのタイプの定義の違いは:mpz_t resultmpz_init(result)です。 mpz_initも必要ですか?

+2

mpz_clearを忘れないでください!または、あなたのためにすべての魔法を行うC++インターフェイスを使用してください。 –

答えて

4

mpz_t resultは、変数を宣言するだけです。タイプmpz_tstruct __mpz_structのtypedefです。この構造体には、mpz_init()で初期化される3つの変数が含まれています。希望が役立ちます。