将一组结构(包含两个mpz_t数字)传递给一个函数

时间:2010-03-23 22:41:20

标签: arrays segmentation-fault structure

我正在开发一个项目,我使用GMP C库中的mpz_t类型。我有一些问题将一个结构数组(包含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);

程序打印预期结果(在main中)但在输入petit_test函数后会产生分段错误错误。

我需要在petit_test中编辑mpz_t2结构数组。 我尝试了一些其他方法来分配并将数组传递给函数,但我没有设法做到这一点。

如果有人能解决这个问题,我会非常感谢!

此致 杰罗姆。

1 个答案:

答案 0 :(得分:2)

在您显示的代码中,您正在为指针数组分配内存,但您没有初始化指向指向任何内容的指针。你需要分配一些mpz_t2的实例,然后指定你的指针指向它们。

---------------在这里编辑---------------

看起来这就是你要做的事情:

mpz_t2 **test = (mpz_t2**)malloc(4 * sizeof(mpz_t2 *));

for (int i=0; i < 4; i++)
{
    test[i] = (mpz_t2*)malloc(sizeof(mpz_t2));
    mpz_t2_init(test[i]); 
    ...
} 
petit_test(test);