在第二次调用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
答案 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
等赋值函数会产生垃圾。