在gmp库中调用mpz_import期间的Segfault

时间:2013-02-13 17:43:12

标签: c++ gmp

我想使用mpz_import方法将64位整数加载到gmp中,我知道我可以通过将数字流式传输到字符串然后使用assign运算符来实现这一点,但这肯定会更慢并且最佳的。

这个代码在运行OSX的我的64位MacBook上运行正常,但是在运行Raspbian,32位Ubuntu服务器和64位Linux Mint的树莓派上出现分段错误失败,都在mpz_import线上失败。

以下是使用gcc 4.7 g++ -std=c++11 -lgmp -lgmpxx main.cpp

编译的代码
#include <iostream>
#include <cstdint>
#include <gmp.h>
#include <gmpxx.h>

using namespace std;

int main()
{
    mpz_t a;
    int64_t b = 4;
    mpz_import(a, 1, 1, sizeof(b), 0, 0, &b); //segfault on this line
    mpz_class c(a);
    cout << c << endl;
}

1 个答案:

答案 0 :(得分:2)

在mpz_import中使用之前,你需要mpz_init a。来自documentation

unsigned long  a[20];
/* Initialize z and a */
mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a);