I use this program to store a mpz value but when I add a 0 ( 400000000000000000000000000000000000000 instead of 40000000000000000000000000000000000000 -> 38 0s instead of 37) I get
free(): double free detected in tcache 2
Aborted (core dumped)
#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;
}
Is there a possibility to store large numbers?
Thank you
Your code has undefined behaviour because you are trying to assign l
from an uninitialised array str
.
I'm guessing you got your functions confused and meant to write the opposite
mpz_get_str(str, 10, l.get_mpz_t());
That code assigns l
to str
.
Use the following code to work out how big str
needs to be
size_t size = mpz_sizeinbase(l.get_mpz_t(), 10) + 2;