微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 GMP 库时出现分段错误核心转储

如何解决使用 GMP 库时出现分段错误核心转储

我对以下功能有问题。我正在尝试实现“平方取幂”,这是一种快速计算大正数的通用方法 一个数的整数次幂。

unsigned long EBS(mpz_t &m,mpz_t g,mpz_t k,mpz_t p) {
        mpz_t y,carre,a;
        mpz_init(y);
        mpz_set_ui(carre,2);

        if(mpz_cmp_si(k,0) < 0) {
            mpz_set_ui(a,1);
            mpz_cdiv_q(g,a,g);
            mpz_mul_si(k,k,-1);
        }
        if(mpz_cmp(k,0) == 0) {
            mpz_set_ui(m,1);
            return mpz_get_ui(m);
        }
    
        mpz_set_ui(y,1);
        
        while (mpz_cmp_si(k,1) > 0) {
            if(mpz_even_p(k) != 0) {
                mpz_powm(g,g,p);
                mpz_set_si(k,(mpz_get_si(k) / 2));
            }
            else {
                mpz_mul(y,y);
                mpz_mul(g,g);
                mpz_set_si(k,((mpz_get_si(k) - 1) / 2));
            }
        }
        mpz_mul(m,y);
        
        return mpz_get_ui(m);
 }

当我从 main() 调用函数时:

int main() {
   mpz_t M,c;
   mpz_init(M);
   mpz_init(c);

   .....

 const char* mess = random_String();
 char c_str[1000];
 std::cout << "Le message à chiffrer : " << mess << std::endl;
 mpz_set_str(M,mess,10);
 EBS(c,M,e,n); //I call the function from here

}

当我调用函数 EBS 时,我得到一个 Erreur de segmentation (core dumped),但我不明白为什么。 你能帮我解决这个问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。