开发者

Why can't I populate and return my array created with rb_ary_new?

I'm not able to insert values into a Ruby array, and retrieve them later.

I put the results of different lines that I tried inside the first function. The results are:

VALUE rStraightCards;

static VALUE check_for_straight() {
    stuff...

    if (begin_straight != NOT_FOUND) {
        for (i = begin_straight; i >= end_straight; i--) {
           // this gives me a segmentation fault when I call straight_cards()
            rb_ary_push(rStraightCards, i);  

            // these lines give me an empty ary when I call straight_cards()
            // RARRAY_P开发者_StackOverflow社区TR(rStraightCards)[i] = i; 
            // RARRAY_PTR(rStraightCards)[INT2NUM(i)] = INT2NUM(i); 
        }
    }
}

VALUE straight_cards() {
    return rStraightCards;
}

void Init_straight_count() {
    rStraightCards = rb_ary_new2(NUM_CARDS);
}


Both arguments for rb_ary_push are supposed to be of type VALUE but you're pushing an int (probably):

VALUE
rb_ary_push(VALUE ary, VALUE item)
{
    rb_ary_modify(ary);
    return rb_ary_push_1(ary, item);
}

Try this:

rb_ary_push(rStraightCards, INT2NUM(i));

I think it is worth noting that VALUE will usually be defined like this:

typedef uintptr_t VALUE;

So the usual warning flags for int-to-pointer conversions won't catch this sort of error.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜