//$ 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