c++ - GMP、C语言内存分配和指针

标签 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:对象 0x6000000000000000 的 *** 错误:未分配重新分配的指针 *** 在malloc_error_break 设置断点调试

我不明白为什么这个东西只发生在第二个循环? 任何建议将不胜感激。谢谢。

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

连这段代码(第二次循环时)

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

有问题。

最佳答案

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

关于c++ - GMP、C语言内存分配和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22825714/

相关文章:

c++ - 使用变换翻转 map ,收到错误 "type int unexpected"

c++ - 释放内存二叉树

php - 访问未定义数组索引导致的内存泄漏

c - 关于C语言中的内存

C 分配动态 double 组并使用 memset 初始化它

C++ : How to ensure that a class member variable is modifiable only within a certain method

c++ - 我可以编写 OpenGL 应用程序而不将其绑定(bind)到某个窗口库吗?

从列表/字典中删除项目后,Python "sys.getsizeof"报告大小相同?

c - 释放分配的字符串时内存损坏

c - 为什么 realloc() 在 C 中 malloc() 成功的地方失败?