2017-12-09 29 views
0

두 번째로 mpz_set_str()을 호출 한 후 seg fault가 발생하는 이유는 누구나 알 수 있습니까? str에서 2 개 이상의 gmp int를 초기화하려면 어떻게해야합니까? 컴파일mpz_set_str을 사용하여 mpz_t를 두 개 이상 초기화하면 segfault가 발생 함

#include <gmp.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) { 

     mpz_t a, b, c; 

     mpz_set_str(a, "10", 10); 
     printf("gets here a\n"); 
     mpz_set_str(b, "20", 10); 
     printf("gets here b\n"); 
     mpz_set_str(c, "30", 10); 
     printf("gets here c\n"); 
} 

: gcc -lm -lgmp -o segf segf.c

답변

1

documentation for mpz_set_str는 말한다 :

5.2 할당 기능

이 기능은 이미 초기화 정수 (Initializing Integers 참조) 새 값을 할당합니다.

...

링크는

5.1 초기화 기능

정수 연산의 기능은 모든 정수 객체가 초기화되어 있다고 가정로 이동합니다. 함수 mpz_init을 호출하면됩니다. 예를 들어,

{ 
    mpz_t integ; 
    mpz_init (integ); 
    … 
    mpz_add (integ, …); 
    … 
    mpz_sub (integ, …); 

    /* Unless the program is about to exit, do ... */ 
    mpz_clear (integ); 
} 

여기서 알 수 있듯이 개체를 초기화하면 새 값을 여러 번 저장할 수 있습니다.

코드는 변수를 초기화하지 않으므로 mpz_set_str과 같은 할당 함수는 가비지를 생성합니다.