我试图编写类似这样的代码
....
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;
有问题。
答案 0 :(得分:2)
由于mpz_class
是一个类,并且您显然是用C ++编写的(而不是C语言,我相应地更改了语言标记),因此使用C分配器是不合适的。您应该使用new[]
或更好,使用std::vector<>
来分配您的数组。虽然已为数组分配内存,但其中的对象未初始化,因为它们的构造函数尚未被调用。