Search code examples
c++memoryrsagmpalloc

What does it mean double free detected in tcache 2 while using mpz?


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


Solution

  • 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;