为什么我的调试器暂停("程序接收信号SIGTRAP,跟踪/断点陷阱")这段代码中有几次?

时间:2016-04-09 17:04:14

标签: c++ debugging pointers runtime-error codeblocks

我正在用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

的第110行

就是这样:

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

非常感谢任何帮助。

0 个答案:

没有答案