代码之家  ›  专栏  ›  技术社区  ›  ecjb

未分配gmp`指针中的bigint为realloc'的算术`

  •  0
  • ecjb  · 技术社区  · 4 年前

    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
    

    但是,如果我取消注释 我得到以下错误:

    a.out(93256,0x11207ce00) malloc: *** set a breakpoint in malloc_error_break to debug
    zsh: abort      ./a.out
    

    我应该做些什么来避免错误?

    1 回复  |  直到 4 年前
        1
  •  3
  •   0___________    4 年前

    您忘记初始化整数了。

    mpz_init(a);
    mpz_init(b);
    mpz_init(c);
    

    作为 mpz_init mpz_set_ui(a,0); /* etc etc*/

    你也可以使用 mpz_inits(a, b, c, NULL);