GMP mpz_array_init是一个过时的函数 – 我们应该如何初始化mpz数组?

我只使用了几次GNU MP Bignum库 ,我有兴趣看到我以前分配/启动数组的方式现在已经过时了。 从整数特殊function :

5.16特殊function

本节中的function用于各种特殊目的。 大多数应用程序不需要它们。 – function:void mpz_array_init(mpz_t integer_array,mp_size_t array_size,mp_size_t fixed_num_bits)

This is an obsolete function. Do not use it. 

这就是我分配和初始化mpz_t数组的mpz_t

 int array_size = 100; mpz_t *num_arr; num_arr = malloc(arr_size * sizeof(mpz_t)); mpz_array_init(*num_arr, array_size, 1024); 

这仍然可以没有和错误或警告,顺便说一句,但现在这个function被列为过时,在C中使用GMP分配数组的正确方法是什么?

只需循环遍历数组元素并使用mpz_init2初始化它们,如果你想预先分配内存:

 for (i = 0; i < array_size; i++) { mpz_init2(num_arr[i], 1024); } 

mpz_array_init的问题在于它永远不会释放分配的内存。 如果您单独初始化元素,则可以在以后释放它们:

 for (i = 0; i < array_size; i++) { mpz_clear(num_arr[i]); } 

不同方法怎么样:

 /* http://scicomp.stackexchange.com/questions/3581/large-array-in-gmp gcc ac -lgmp */ #include  // malloc #include  #include  #define LENGTH 100000 int main () { /* definition */ mpz_t *A; mpz_t temp; mpz_init(temp); /* initialization of A */ A = malloc(LENGTH * sizeof(mpz_t)); if (A==NULL) { printf("ERROR: Out of memory\n"); return 1; } // assign mpz_set_ui(temp, 121277777777777777); // using temp var mpz_set(A[4], temp); mpz_set_str(A[5], "19999999999999999999999999999999999999999999999999992",10); // using string if number > max // check gmp_printf ("%Zd\n",A[4]); // gmp_printf ("%Zd\n",A[5]); // /* no longer need A */ free(A); mpz_clear(temp); return 0; } 

好吗 ?