1

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

这段代码在我运行 OSX 的 64 位 MacBook 上运行良好,但是在运行 Raspbian、32 位 Ubuntu Server 和 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;
}
4

1 回答 1

2

在 mpz_import 中使用之前需要 mpz_init a。从文档中:

unsigned long  a[20];
/* Initialize z and a */
mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a);
于 2013-02-13T18:47:41.737 回答