调用mpz_clear后执行mpz_init触发SIGSEGV段错误的问题咨询
调用mpz_clear后执行mpz_init触发SIGSEGV段错误的问题咨询
我最近在使用GNU MP库时遇到了一个棘手的段错误问题——明明已经先调用mpz_clear清理了mpz_t类型的变量rop,紧接着调用mpz_init重新初始化它,结果程序还是触发了SIGSEGV崩溃。
先给大家看一下精简掉无关逻辑后的代码:
void mpz_choose_ui(mpz_t rop, ul a, ul b){ mpz_clear(rop); mpz_init(rop); }
用gdb调试后,捕获到的错误调用栈信息如下:
0x00007ffff7da2c95 in __GI___libc_free (mem=0xffffffffffffffff) at malloc.c:3453 3453 if (chunk_is_mmapped (p)) /* release mmapped memory. */
从错误信息来看,__libc_free尝试去释放一个无效的地址0xffffffffffffffff,可我明明已经先执行了mpz_clear来清理变量了啊。有没有熟悉GNU MP库的朋友能帮我分析下这到底是哪里出问题了?
备注:内容来源于stack exchange,提问作者user20695956
相关产品推荐
相关产品推荐

