Я работаю над проектом, в котором я использую тип mpz_t из библиотеки GMP C. У меня есть некоторые проблемы при передаче массива структур (содержащих mpz_ts) адрес функции:
Я попытаюсь объяснить мою проблему с помощью некоторого кода.
Итак, вот структура:
struct mpz_t2{
mpz_t a;
mpz_t b;
};
typedef struct mpz_t2 *mpz_t2;
void
mpz_t2_init(mpz_t2 *mpz_t2)
{
mpz_init(mpz_t2->a);
mpz_init(mpz_t2->b);
}
void
petit_test(mpz_t2 *test[])
{
printf("entering petit test function\n");
for (int i=0; i < 4; i++)
{
gmp_printf("test[%d]->a = %Zd and test[%d]->b = %Zd\n", test[i]->a, test[i]->b);
}
}
/* IN MAIN FUNCTION */
mpz_t2 *test = malloc(4 * sizeof(mpz_t2 *));
for (int i=0; i < 4; i++)
{
mpz_t2_init(&test[i]); // if I pass test[i] : compiler error
mpz_set_ui(test[i].a, i); //if test[i]->a compiler error
mpz_set_ui(test[i].b, i*10); //same problem
gmp_printf("%Zd\n", test[i].b); //prints correct result
}
petit_test(test);
Программа печатает ожидаемый результат (в основном), но после входа в функцию petit_test выдает ошибку ошибки сегментации.
Мне нужно отредактировать структурный массив mpz_t2 в petit_test.
Я попробовал некоторые другие способы выделения и передачи массива в функцию, но мне не удалось сделать это правильно.
Если у кого-то есть решение этой проблемы, я был бы очень благодарен!
С уважением,
Иероним.