3
我正在研究Ruby原生C方法:power mod。這是我得到的:Ruby原生C大整數段錯誤
#define TO_BIGNUM(x) (FIXNUM_P(x) ? rb_int2big(FIX2LONG(x)) : x)
#define CONST2BIGNUM(x) (TO_BIGNUM(INT2NUM(x)))
VALUE method_big_power_mod(VALUE self, VALUE base, VALUE exp, VALUE mod){
VALUE res = TO_BIGNUM(INT2NUM(1));
base = TO_BIGNUM(base);
exp = TO_BIGNUM(exp);
mod = TO_BIGNUM(mod);
while (rb_big_cmp(exp, CONST2BIGNUM(0))) {
if (rb_big_modulo(exp, CONST2BIGNUM(2))) {
VALUE mul = rb_big_mul(res, base);
res = rb_big_modulo(mul, mod);
}
base = rb_big_modulo(rb_big_pow(base, CONST2BIGNUM(2)), mod);
exp = rb_big_div(exp, CONST2BIGNUM(2));
}
return res;
}
它每次都會發生段錯誤。我將問題隔離爲rb_big_modulo
調用。 gdb stacktrace說在調用rb_big_modulo
之後,它在bigdivrem
方法中崩潰。我試圖通過bignum.c
的來源,但我無法弄清楚是什麼導致了這次事故。難道我做錯了什麼?
你可以添加足夠的代碼使它成爲[SSCCE](http://sscce.org/)嗎? – n0741337