//$ DO DECLARATION
#define VEC_MAX_SIZE 600000
mpz_t Vec[ VEC_MAX_SIZE ];
//$ DO INITIALIZATION
mpz_array_init(Vec[ 0 ], VEC_MAX_SIZE, 2000); // Stack overflow error - 3rd param
问题:
的问题是,我不知道如何正确初始化mpz_t阵列,在这种情况下是VEC。错误是堆栈溢出。我认为这是由第三个参数引起的。这里是mpz_array_init的样机/定义:
#define mpz_array_init __gmpz_array_init
__GMP_DECLSPEC void mpz_array_init __GMP_PROTO ((mpz_ptr, mp_size_t, mp_size_t));
错误:
Unhandled exception at 0x008e8377 in TestMPIR.exe: 0xC00000FD: Stack overflow.
注:
我使用MPIR 3.1.1在Windows 7 64位。
这从一个MPIR的例子正常工作:
mpz_t Vec[ 20000 ];
mpz_array_init(Vec[ 0 ], 20000, 512);
答:
感谢@Zeta他/她真棒答案。 纠正我,如果我错了。我只是想在这里发布这个,所以其他新手可以从中学习。
#define MAX_VEC_SIZE 600000
的malloc方法(应该是对于C风格的我猜的):
mpz_t *Vec;
if((Vec = (mpz_t *)::malloc(sizeof(mpz_t) * MAX_VEC_SIZE)) == 0) {
::perror("Out of memory");
return false;
}
//> Initialize Vec loop (...)
::free(Vec);
C++风格?
mpz_t *VecEx = new mpz_t[ MAX_VEC_SIZE ];
//> Initialize VecEx loop (...)
delete [ ] VecEx;
这个答案是基于@泽塔的回答(接受的答案)。
你可以试试这个mpz_array_init(Vec,VEC_MAX_SIZE,sizeof(mpz_t)) – 2013-03-14 22:04:49
完成,它给出了同样的错误。 – CLearner 2013-03-14 22:06:16