【问题标题】:NTL Library ref_GF2 Run-time ErrorNTL 库 ref_GF2 运行时错误
【发布时间】:2016-02-27 20:19:02
【问题描述】:

我正在使用 NTL C++ 库。在尝试执行以下代码时:

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;
}

问题似乎源于 set(*one) 行代码。

我一直试图了解代码中出了什么问题,但无济于事。任何帮助表示赞赏。

【问题讨论】:

    标签: c++ ntl


    【解决方案1】:

    来自documentation

    GF2 的头文件还声明了类ref_GF2,它 用于表示对GF2非常量引用,[...]。

    存在从ref_GF2const GF2 的隐式转换 从GF2&amp;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

    【讨论】:

    • 嘿,刚刚也解决了这个问题。你是对的,我不得不使用 GF2 而不是 ref_GF2。感谢您的反馈!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多