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

AGS*_*AGS 4 c gmp

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

5.16特殊功能

本节中的功能用于各种特殊目的.大多数应用程序不需要它们. - 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.
Run Code Online (Sandbox Code Playgroud)

这是我分配和初始化数组的方式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);
Run Code Online (Sandbox Code Playgroud)

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

nwe*_*hof 8

mpz_init2如果要预先分配内存,只需循环遍历数组元素并逐个初始化它们:

for (i = 0; i < array_size; i++) {
    mpz_init2(num_arr[i], 1024);
}
Run Code Online (Sandbox Code Playgroud)

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

for (i = 0; i < array_size; i++) {
    mpz_clear(num_arr[i]);
}
Run Code Online (Sandbox Code Playgroud)

  • 不,需要`mpz_clear`来释放为每个`mpz_t`分配的内存.另外,你必须调用`free(num_arr)`来释放数组. (2认同)