GMP,C语言内存分配和指针
GMP, C language memory allocation and pointer
我试图编写这样的代码
....
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<>
来分配数组。尽管已为数组分配了内存,但数组中的对象尚未初始化,因为它们的构造函数尚未被调用。
相关文章:
- 通过双指针分配指针
- 在不工作的情况下为数组分配指针,但反过来也可以
- 无法使用"std::make_shared"分配指针
- 分配指针时出现分段错误
- 为什么有时仅使用Ampersand运算符在C 中分配指针
- 重新分配指针阵列的一部分的安全方法
- 为什么在执行增量操作之前分配指针值
- 当指针指向的对象被另一个类的实例删除时,重新分配指针
- 在堆上分配指针的原因是什么?
- 有没有办法防止分配指针?
- 将运算符重写应用于具有动态分配指针的类
- 在堆上分配指针数组
- 在另一个结构中的结构内解除分配指针
- 分配指针后,是否可以为指针指向的事物分配变量名称?
- 重新分配指针后,将类功能与指针一起使用
- 为什么我的新分配指针会自动在程序退出上删除
- 分配指针的方法之间有什么区别?
- 如何声明和分配指针
- 内存分配(指针和堆栈)
- 通过参数分配指针的值