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

2

1 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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy