【问题标题】:GMP, C language memory allocation and pointerGMP、C语言内存分配和指针
【发布时间】:2014-05-14 13:52:29
【问题描述】:

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

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

有问题。

【问题讨论】:

  • 在使用变量之前实际初始化变量怎么样?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2016-02-21
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多