2012-06-10 64 views
-3
mpz_t* myArr= new mpz_t[M+1]; 
cout << myArr[0] << endl; 
cin.get(); //so I know the program pauses here if everything's OK so far 

M是一個很長的數據類型。C++ GMP,爲什麼會拋出錯誤?

我也試過

mpz_t* myArr= new mpz_t[M+1]; 
mpz_set_si(myArr[0],0); 
cout << myArr[0] << endl; 
cin.get(); //so I know the program pauses here if everything's OK so far 

只是爲了給它一個值,但它不會仍然工作。

運行時墜毀

+0

有許多方法在此可能導致崩潰:M可以大於0更小,或構造或操作者'<<()''爲可以mpz_t'被打破,或者以前的代碼可能會損壞堆。你將不得不做更多的工作來努力縮小範圍。 –

+0

我所做的就是在初始化數組後輸出數組的第一個元素。他們不是默認爲0嗎? – MyNameIsKhan

+0

如果'mpz_t'有一個構造函數,它將被調用。如果它有一個用於打印的「operator <<()」,那麼它將被調用。我不知道'mpz_t'是什麼,所以我不能說這些東西是否有影響。 –

回答

1

您必須初始化mpz_t值,這是符合GMP C API只是普通的C結構。如果你想使用帶有構造函數的類,可以使用一個C++類mpz_class。

實施例:

mpz_class x; 
x = 3; 
mpz_class y; 
y = x * 7; 
+0

但是,如果我使用mpz_class我怎麼能初始化變量/執行算術/ etc?例如,如果我想將一個mpz_class變量設置爲x * x-1,其中x是一個很長的長度 – MyNameIsKhan

+0

@只需指定它即可。 'mpz_class z; z = x * x-1;'。使用GMP時,由於庫限制,這將無法輕鬆處理long long和unsigned long long,但可以與其他內置的整數類型一起使用,如int,long,unsigned long等。 – wjl

+0

我在我的程序中嘗試此操作,我更多的是當我嘗試強制mpz與非mpz一起玩時遇到的相同的「無效操作符」問題。我不能用多頭? – MyNameIsKhan

相關問題