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);