GMP,C语言内存分配和指针

时间:2014-04-03 00:39:53

标签: c++ memory malloc heap-memory gmp

我试图编写类似这样的代码

....
mpz_class *x = NULL;
mpz_class *lValue = NULL;
....
for(int k = 0; k < 2; k++) {
    x = NULL;
    lValue = NULL;
    x = (mpz_class*) malloc(sizeof(mpz_class) * exponentForFactors[k]);
    lValue = (mpz_class*) malloc(sizeof(mpz_class) * exponentForFactors[k]);

    rValue = 0;

    mpz_class exp = (p-1)/q[k];

    mpz_powm(lValue[0].get_mpz_t(), B.get_mpz_t(),exp.get_mpz_t(), p.get_mpz_t()); <- this part

exponentForFactors[k] = {3, 1} 当k小于2时,此代码将循环两次。 在第一次循环,没关系。没有错误但是当它是第二个循环时,它有我指出的错误消息。 malloc: *** error for object 0x6000000000000000: pointer being realloc'd was not allocated *** set a breakpoint in malloc_error_break to debug

我不明白为什么这件事只发生在第二圈? 任何建议都会感激不尽。谢谢。

////////////////////////////

甚至这个代码(当第二个循环时)

cout << "lvalue = " << lValue[0] << endl;

有问题。

1 个答案:

答案 0 :(得分:2)

由于mpz_class是一个类,并且您显然是用C ++编写的(而不是C语言,我相应地更改了语言标记),因此使用C分配器是不合适的。您应该使用new[]或更好,使用std::vector<>来分配您的数组。虽然已为数组分配内存,但其中的对象未初始化,因为它们的构造函数尚未被调用。