gmp 中的 bigint 算术`未分配重新分配的指针`
Arithmetic with bigint in gmp `pointer being realloc'd was not allocated`
根据上一个问题,我正在尝试使用 gmp
和以下 main.c
进行 bigint 运算
#include<stdio.h>
#include<gmp.h>
int main (){
mpz_t a, b, c;
mpz_set_ui(a,0);
mpz_set_ui(b,0);
mpz_set_ui(c,0);
mpz_set_str(a, "23", 10);
mpz_set_str(b, "35", 10);
printf("%s\n",mpz_get_str (NULL, 10, a));
printf("%s\n",mpz_get_str (NULL, 10, b));
printf("%s\n",mpz_get_str (NULL, 10, c));
mpz_mul(c,a,b);
printf("%s\n",mpz_get_str (NULL, 10, c));
// mpz_t d;
// mpz_mul(d,c,c);
return 0;
}
如果我写命令 gcc so.c -lgmp && ./a.out
我得到输出:
23
35
0
805
但是,如果我取消注释 main.c
的第 18 行和第 19 行,我会收到以下错误:
a.out(93256,0x11207ce00) malloc: *** set a breakpoint in malloc_error_break to debug
zsh: abort ./a.out
我应该怎么做才能避免错误?
您忘记初始化整数。
mpz_init(a);
mpz_init(b);
mpz_init(c);
因为 mpz_init
已初始化并将零分配给整数,所以您不需要 mpz_set_ui(a,0); /* etc etc*/
您也可以使用mpz_inits(a, b, c, NULL);
根据上一个问题,我正在尝试使用 gmp
和以下 main.c
#include<stdio.h>
#include<gmp.h>
int main (){
mpz_t a, b, c;
mpz_set_ui(a,0);
mpz_set_ui(b,0);
mpz_set_ui(c,0);
mpz_set_str(a, "23", 10);
mpz_set_str(b, "35", 10);
printf("%s\n",mpz_get_str (NULL, 10, a));
printf("%s\n",mpz_get_str (NULL, 10, b));
printf("%s\n",mpz_get_str (NULL, 10, c));
mpz_mul(c,a,b);
printf("%s\n",mpz_get_str (NULL, 10, c));
// mpz_t d;
// mpz_mul(d,c,c);
return 0;
}
如果我写命令 gcc so.c -lgmp && ./a.out
我得到输出:
23
35
0
805
但是,如果我取消注释 main.c
的第 18 行和第 19 行,我会收到以下错误:
a.out(93256,0x11207ce00) malloc: *** set a breakpoint in malloc_error_break to debug
zsh: abort ./a.out
我应该怎么做才能避免错误?
您忘记初始化整数。
mpz_init(a);
mpz_init(b);
mpz_init(c);
因为 mpz_init
已初始化并将零分配给整数,所以您不需要 mpz_set_ui(a,0); /* etc etc*/
您也可以使用mpz_inits(a, b, c, NULL);