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

GMP, C language memory allocation and pointer

本文关键字:分配 指针 内存 语言 GMP      更新时间:2023-10-16

我试图编写这样的代码

....
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;

有问题。

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