Почему мое расширение C не создает уникальные экземпляры? - PullRequest
1 голос
/ 26 июня 2011

Я создал расширение C, цель которого состоит в том, чтобы определить, приведет ли серия карт к стриту или нет.Пример может быть немного сложнее, чем необходимо, чтобы показать проблему, но по сути foo должен хранить внутри него все карты, которые были оценены (каждая с присвоенным индексом).Поэтому бар должен иметь совершенно отдельный набор карточек и индексов.Но кажется, что когда я начинаю назначать карты на панель, она перезаписывает foo.Я включу свой код ниже на случай, если я что-то не так с указателями.

>> require 'ext/straight_count' #=> true                                                                                            

>> foo = EV::StraightCount.new; 
>> foo.evaluate(6,0); 
>> foo.evaluate(5,1); 
>> foo.evaluate(4,2); 
>> foo.evaluate(3,3); 
>> foo.evaluate(3,4); 
>> foo.evaluate(3,5); 
>> foo.evaluate(3,6); 
>> foo.straight_cards
=> []

>> bar = EV::StraightCount.new; 
>> bar.evaluate(11,0); 
>> bar.evaluate(10,1); 
>> bar.evaluate(9,2); 
>> bar.evaluate(8,3); 
>> bar.evaluate(7,4); 
>> bar.evaluate(2,5); 
>> bar.evaluate(2,6); 
>> bar.straight_cards
=> [11, 10, 9, 8, 7]

>> foo.evaluate(3,6); 
>> foo.straight_cards 
=> [11, 10, 9, 8, 7]

.h file

static int *pCards;
static int *pSortedCards[NUM_CARDS];
static int i, rMadeHandIndex, cCards[NUM_CARDS], begin_straight, end_straight;

VALUE rIsFound = Qfalse;

static VALUE EV, StraightCount;

static void reset_score();
static VALUE found();
static VALUE score();
static VALUE straight_cards();

1 Ответ

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

pSortedCards представляется глобальным.Отсюда и причина, по которой вы поделились состоянием.

...