开发者

Why is my C extension not creating unique instances?

I created a C extension, the purpose of which is to determine if a series of cards will result in a straight or not. The example might be a little more complicated than necessary to show the issue, but essentially foo should be storing inside of it all the cards that were evaluated (each with an assigned index). So bar should have an entirely separate set of cards and indexes. But it seems that when I start assigning cards to bar, it is overwriting foo. I'll include my code below in case I am doing something wrong with pointers.

>> 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开发者_JAVA百科.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();


pSortedCards appears to be a global. Hence the reason why you have shared state.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜