我正在用C ++编写UNO游戏用于教育目的。过去两天我一直对这个问题感到恼火。我到处寻找答案,但似乎没有任何工作。 Codeblocks 13.12中的调试器停止,而我有这些代码行:
cout << "\nThe " << (*pla)->name << " takes 4 cards! " << endl;
for (int g=0; g<2; g++) take_two_cards(pla, deck);
该类的函数take_two_cards
如下:
void Hand::take_two_cards(Hand ** pla, Deck * deck)
{
for (int i=0; i<2; i++)
{
(*pla)->draw_a_card(deck->remove_card());
}
return;
}
函数remove_card
如下:
Card * Deck::remove_card()
{
Card * temp;
vector<Card>::iterator v = vec.end()-1;
temp=&(*v);
vec.pop_back();
return temp;
}
你可以弄清楚,在Deck课程中,我有一个名为vec的vector
。
函数draw_a_card
如下:
void Hand::draw_a_card(Card * temp)
{
vec.push_back(*temp);
return;
}
问题恰好在我提到的最后一个vec.push_back(*temp);
之前。我必须在此添加take_two_cards
连续使用2次。所以vec.push_back(*temp)
实际上被称为4次:这里呈现的是2次,整个过程再次重复。当vec.push_back(*temp)
工作3次时,调试器在第4次暂停,我得到
Program received signal SIGTRAP, Trace/breakpoint trap.
In ?? () ()
#7 0x0042b9ec in __gnu_cxx::new_allocator<Card>::deallocate (this=0x28fec4, __p=0x702c10)
at c:/program files (x86)/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/ext/new_allocator.h:110
现在,new_allocator.h
就是这样:
108: void
109: deallocate(pointer __p, size_type)
110: { ::operator delete(__p); }
111:
112: size_type
113: max_size() const _GLIBCXX_USE_NOEXCEPT
114: { return size_t(-1) / sizeof(_Tp); }
非常感谢任何帮助。