我试图在GMP中获得一个大整数的二进制表示 . 我将1 's and 0'存储在一个名为 expBinary 的数组中 . 我使用malloc来分配大小为"int"的内存,然后在添加新位时使用 realloc 来增加此内存 . 转换运行完美没有任何问题,但是当我尝试在while循环后使用malloc分配更多的内存时,它给我 segmentation fault 当我调用相同的代码 second time 时,它第一次给我没有分段错误 . 我已经检查过"expBinary"没有存储任何超出范围的内容,我已经给出了下面的代码
int binarySize = 0;
int * expBinary = malloc(sizeof(int));
int i = 0;
// Run until exp == 0
while(mpz_cmp_ui(exp,0) != 0)
{
binarySize++;
expBinary = (int*) realloc(expBinary,(binarySize));
// Getting LSB of exp
if(mpz_even_p(exp) != 0)
expBinary[i] = 0;
else
expBinary[i] = 1;
// Incrmenting variables
i++;
// Dividing exponent by 2
mpz_tdiv_q_ui(exp,exp,2);
}
// This line is giving error
int * temp = malloc(sizeof(int));
1 回答
如果您使用
int
数组,那么这是错误的它应该是
或等效地,
出于显而易见的原因,我更喜欢
sizeof(*expBinary)
,而且,如果realloc()
失败,你会松开对前一指针的引用,所以我推荐这个现在,如果你想使用任何
printf("%s\n", expBinary);
打印表示,你应该使用char *
,在这种情况下你应该始终考虑sizeof(char) == 1
,并且你需要在1
和0
的末尾添加一个额外的字节值'\0'
.