2012-06-13 41 views
0

我正在嘗試更改函數extended_gcd中mpz_t類型的d的值,然後將其傳遞迴我的主函數,並在執行程序時出現段錯誤。函數參數導致GMP中的段錯誤

int extended_gcd(mpz_t c, mpz_t a, mpz_t b) 
    { 

     mpz_t x, lastx, y, lasty, temp, quotient, temp2; 

     mpz_init(temp); 
     mpz_init(temp2); 
     mpz_init(a); 
     mpz_init(b); 
     mpz_init(c); 
     mpz_init(quotient); 
     mpz_init_set_ui(x,0); 
     mpz_init_set_ui(lastx,1); 
     mpz_init_set_ui(lasty,0); 
     mpz_init_set_ui(y,1); 

while(!(mpz_cmp(b, 0)==0)) 
{ 
    mpz_set(temp, b); 
    mpz_cdiv_q(quotient, a, b); 
    mpz_mod(b, a, b); 
mpz_set(a, temp); 
    mpz_set(temp, x); 
mpz_mul(temp2, quotient, x); 
mpz_sub(x, lastx, temp2); 
    mpz_set(lastx, temp); 
    mpz_set(temp, y); 
    mpz_mul(temp2, quotient, y); 
mpz_sub(y, lasty, temp2); 
    mpz_set(lasty, temp);     
} 

mpz_set(c, lastx);   
mpz_clear(x); 
mpz_clear(y); 
mpz_clear(lastx); 
mpz_clear(lasty); 
mpz_clear(temp); 
mpz_clear(temp2); 
mpz_clear(quotient); 
return 0; 

}

這是我的主要代碼:

extended_gcd(d,e,phi); 
    printf("d="); 
    mpz_out_str(stdout, 10, d); 
    printf("\n"); 

任何想法可能是錯誤的,我該如何解決? 謝謝你的時間。

回答

1

我看到一個問題:您不應該在參數extended_gcd()上調用mpz_init()。您只應對extended_gcd()內聲明的mpz_t變量調用mpz_init()/ mpz_clear()。