Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
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;
–
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.