使用 mpz 时在 tcache 2 中检测到双重释放是什么意思?

问题描述 投票:0回答:1

我使用这个程序来存储 mpz 值,但是当我添加 0 ( 400000000000000000000000000000000000000 而不是 40000000000000000000000000000000000000 -> 38 0 而不是 37)我明白

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

是否可以存储大量数据?

谢谢你

c++ memory rsa gmp alloc
1个回答
12
投票

您的代码具有未定义的行为,因为您尝试从未初始化的数组

l
分配
str

我猜你对你的函数感到困惑并且打算写相反的内容

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

该代码将

l
分配给
str

使用以下代码计算出

str
需要有多大

size_t size = mpz_sizeinbase(l.get_mpz_t(), 10) + 2;
© www.soinside.com 2019 - 2024. All rights reserved.