【发布时间】:2019-08-22 20:07:30
【问题描述】:
我使用这个程序来存储一个 mpz 值,但是当我添加一个 0 ( 4000000000000000000000000000000000000000 而不是 40000000000000000000000000000000000000 -> 38 0s 而不是 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;
}
是否有可能存储大量数字?
谢谢
【问题讨论】:
-
我应该如何声明str?只有在我阅读了这些论点后,我才能知道“信息”有多长。有没有办法只声明一个指针?
-
这是使用 C 样式字符串时的常见问题。如果您不知道消息可能有多大,通常最好假设最坏的情况并分配最大可能的消息。由于现在这是一个静态大小的分配,请考虑使用自动变量。例如,考虑使用
char str[1024];代替char *str= (char*)malloc(sizeof(char)*1024);。将来更少的内存管理问题。