使用mpz_set_str初始化两个以上的mpz_t会导致段错误

时间:2017-12-09 20:47:12

标签: c gmp

在第二次调用mpz_set_str()之后,任何人都知道为什么以下会导致seg错误?如何从str?

初始化两个以上的gmp ints
#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 个答案:

答案 0 :(得分: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等赋值函数会产生垃圾。