我使用这个程序来存储 mpz 值,但是当我添加 0 ( 400000000000000000000000000000000000000 而不是 40000000000000000000000000000000000000 -> 38 0 而不是 37)我明白
free():在 tcache 2 中检测到双重释放
中止(核心转储)
#include <iostream>
#include <gmpxx.h>
#include <vector>
using namespace std;
int main(const int argc, const char * const argv[])
{
char *str = (char*)malloc(sizeof(char)*1024);
mpz_class l;
l = 40000000000000000000000000000000000000_mpz;
mpz_set_str(l.get_mpz_t(), str, 10);
cout << endl << str;
return 0;
}
是否可以存储大量数据?
谢谢你
您的代码具有未定义的行为,因为您尝试从未初始化的数组
l
分配str
。
我猜你对你的函数感到困惑并且打算写相反的内容
mpz_get_str(str, 10, l.get_mpz_t());
该代码将
l
分配给 str
。
使用以下代码计算出
str
需要有多大
size_t size = mpz_sizeinbase(l.get_mpz_t(), 10) + 2;