Почему я не могу заполнить и вернуть свой массив, созданный с помощью rb_ary_new? - PullRequest
1 голос
/ 26 июня 2011

Я не могу вставить значения в массив Ruby и получить их позже.

Я поместил результаты разных строк, которые я пробовал, в первую функцию.Результаты:

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_PTR(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);
}

1 Ответ

2 голосов
/ 26 июня 2011

Оба аргумента для rb_ary_push должны иметь тип VALUE, но вы нажимаете int (возможно):

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

Попробуйте это:

rb_ary_push(rStraightCards, INT2NUM(i));

Я думаю, что стоит отметить, что VALUE обычно определяется следующим образом:

typedef uintptr_t VALUE;

Так что обычные предупреждающие флаги для преобразований типа int в указатель не отлавливают такого рода ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...