C mpz_tdiv_q_2exp上的GMP故障

C mpz_tdiv_q_2exp上的GMP故障,c,segmentation-fault,gmp,C,Segmentation Fault,Gmp,我有一个密码学实验的程序。在我试图分离公共指数和模的过程中,我一直在使用前面提到的函数。它工作了一段时间,但每当我执行计算足够的次数时,mpz_t变量的地址就会改变,然后它就会抛出一个分段错误 //从格式为的公钥中获取N和e //{e}FFFFFFFFFFFFFFFF{N} 无效获取(mpz_t retvalN、mpz_t retvale、mpz_t key){ //创建0xFF作为mpz_t以供以后使用 mpz_t ff; mpz_init(ff); mpz_集_ui(ff,0xff); //

我有一个密码学实验的程序。在我试图分离公共指数和模的过程中,我一直在使用前面提到的函数。它工作了一段时间,但每当我执行计算足够的次数时,mpz_t变量的地址就会改变,然后它就会抛出一个分段错误

//从格式为的公钥中获取N和e
//{e}FFFFFFFFFFFFFFFF{N}
无效获取(mpz_t retvalN、mpz_t retvale、mpz_t key){
//创建0xFF作为mpz_t以供以后使用
mpz_t ff;
mpz_init(ff);
mpz_集_ui(ff,0xff);
//存储要稍后导入的大量数据
字符数据[4096];
//计算连续0xFF的数量
int no_ffs=0;
//数据索引
长i=0;
而(无速度小于8){
//测试=键&0xFF
mpz_检验;
mpz_初始(测试);
mpz_集_ui(测试,0);
mpz_和(测试、键、ff);
//tmp=(无符号整数)测试
无符号整数tmp;
tmp=mpz_get_ui(测试);
mpz_清除(测试);
如果(tmp==0xff){
++没有!;
}
否则{
数据[i++]=tmp;
否=0;
}
//键>>=8
//断层源
mpz_tdiv_q_2exp(键,键,8);
}
mpz_清除(ff);
mpz_导入(retvalN,4096,1,sizeof(char),1,0,数据);
}

我找到了答案。原来我没有检查
是否不等于零。添加一些代码以检查是否修复了我的segfault问题。

如果没有