1. ホーム
  2. c++

[解決済み】mpz使用中にtcache 2でダブルフリーが検出されたとはどういう意味ですか?

2022-02-09 19:08:27

質問内容

このプログラムを使ってmpzの値を保存していますが、0を追加すると( 40000000000000000000000000の代わりに400000000000000000000 -> 37の代わりに38 0s)となる。

free(): tcache 2 で二重の空き領域が検出されました。

中止(コアダンプ)

#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;
}

大きな数字を格納することは可能ですか?

ありがとうございます。

解決方法は?

あなたのコードには未定義の動作があります。 l を初期化されていない配列から str .

関数を間違えて、その逆を書こうとしたのでしょう

mpz_get_str(str, 10, l.get_mpz_t());

このコードでは lstr .

以下のコードで str が必要です。

size_t size = mpz_sizeinbase(l.get_mpz_t(), 10) + 2;