使用GMP库的片段违规(生成核心)。

问题描述 投票:1回答:1

你好吗?我想在C++上学习使用多精度库GMP。这是我的代码。

#include <iostream>
#include <cstdlib>
#include <gmpxx.h>
using namespace std;

int main(){

    mpf_set_default_prec (128);
    double a = 2., b = 3.;
    mpf_t x, y, z;

    mpf_set_d(x, a);
    mpf_set_d(y, b);

    mpf_div(z, x, y);

    gmp_printf("%.*Ff \n", 30, z);

    mpf_clear (x);
    mpf_clear (y);
    mpf_clear (z);

    return 0;
}

编译正确,但在执行过程中返回Segment violation('core'生成)。错误在哪里?

c++ gmp
1个回答
1
投票

mpf_t 是GMP使用的C浮点类型。正如文档中所说,"一个 mpf_t 对象必须在存储第一个值之前被初始化"。所以你应该这样做。

#include <iostream>
#include <cstdlib>
#include <gmpxx.h>
using namespace std;

int main(){

    mpf_set_default_prec (128);
    double a = 2., b = 3.;
    mpf_t x, y, z;
    mpf_init(x);
    mpf_init(y);
    mpf_init(z);

    mpf_set_d(x, a);
    mpf_set_d(y, b);

    mpf_div(z, x, y);

    gmp_printf("%.*Ff \n", 30, z);

    mpf_clear (x);
    mpf_clear (y);
    mpf_clear (z);

    return 0;
}

但是,如果你使用的是C++,你可以考虑使用... C++接口 的库,这样可以省去init和clear的调用。

© www.soinside.com 2019 - 2024. All rights reserved.