只使用了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(使用前将#替换为@)