2017-02-14 4 views
2

Selon le manuel de GMP, "Les fonctions pour l'arithmétique entière supposent que tous les objets entiers sont initialisés, ce que vous faites en appelant la fonction mpz_init."Initialisation des variables dans GMP

Par exemple,

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; 
} 

si vous supprimez mpz_init(result); du code ci-dessus, le compilateur génère une erreur de défaut de segmentation. Donc, ma question, quelle est exactement la différence entre ces deux types de définition: mpz_t result et mpz_init(result). Pourquoi mpz_init est-il également requis?

+2

N'oubliez pas mpz_clear! Ou utilisez l'interface C++, qui fait toute la magie pour vous. –

Répondre

4

mpz_t result ne déclare qu'une variable. Le type mpz_t est un typedef pour struct __mpz_struct. Cette structure contient trois variables qui sont initialisées par mpz_init(). J'espère que cela pourra aider.