我想使用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;
}
答案 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);