开发者

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

开发者 https://www.devze.com 2023-03-15 22:07 出处:网络
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:

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

精彩评论

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

关注公众号