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
21 Answer
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; 1