2016-02-27 40 views
1

我正在使用NTL C++庫。在嘗試執行以下代碼:NTL庫ref_GF2運行時錯誤

NTL::ref_GF2 *zero = new NTL::ref_GF2(); 
NTL::ref_GF2 *one = new NTL::ref_GF2(); 
set(*one); 

我正在一個EXC_BAD_INSTRUCTION錯誤:

ref_GF2 operator=(long a) 
{ 
    unsigned long rval = a & 1; 
    unsigned long lval = *_ref_GF2__ptr; 
    lval = (lval & ~(1UL << _ref_GF2__pos)) | (rval << _ref_GF2__pos); 
    *_ref_GF2__ptr = lval; 
    return *this; 
} 

這個問題似乎從集合(*一個)的代碼行幹。

我一直在試圖理解代碼中出了什麼問題,但沒有用。任何幫助讚賞。

回答

0

documentation

The header file for GF2 also declares the class ref_GF2 , which use used to represent non-const references to GF2 's, [...].

There are implicit conversions from ref_GF2 to const GF2 and from GF2& to ref_GF2 .

你,因爲你的定義是沒有目標的參照得到錯誤。 在您撥打set(*one)時,*one未指向GF2,因此會引發錯誤。

它工作正常,如果你調用set(*one)前指向一個GF2

NTL::GF2 x = GF2(); 
NTL::set(x);    // x = 1 

NTL::ref_GF2 *zero = new NTL::ref_GF2(x); 
NTL::ref_GF2 *one = new NTL::ref_GF2(x); 

// this works now 
NTL::clear(*zero); 
NTL::set(*one); 

cout << *zero << endl;  // prints "1" 
cout << *one << endl;  // prints "1" 

注意ref_GF2表示對GF2參考。我的示例代碼顯示零和一個都指向x。也許你想用GF2而不是ref_GF2

+0

嘿,剛剛解決了這個問題。你是對的,我不得不使用GF2而不是ref_GF2。感謝您的反饋! –