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

2024-02-16

只使用了GNU MP Bignum 库 https://gmplib.org/index.html#dir有几次,我很感兴趣地发现我以前分配/启动数组的方式现在已经过时了。从整数特殊函数 https://gmplib.org/manual/Integer-Special-Functions.html#Integer-Special-Functions:

5.16 特殊功能

本节中的函数用于各种特殊目的。最多 应用程序将不需要它们。 — 函数:void mpz_array_init (mpz_t 整数_数组、mp_size_t 数组大小、mp_size_t 固定_num_位)

This is an obsolete function. Do not use it.

这就是我分配和初始化数组的方式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);

顺便说一句,这仍然可以在没有错误或警告的情况下工作,但现在这个函数已被列为过时的,那么在 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]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐