关于指针上std :: vector :: push_back中的EXC_BAD_ACCESS错误的问题

时间:2011-06-04 13:02:42

标签: c++ std stdvector

std :: vector 肯定很棒,嘿?

我正在使用EXC_BAD_ACCESS使用push_back来添加元素。 (我有一次类似的问题,在SO上查找,解决了!可悲的是,这似乎是一个不同的问题。)

 class BackgroundGroupsHandler {
 public:
     void addBeat(Beat *b);
     vector<beat_display_group*> groups;
 };

Beat是一个类似结构的类,它带有一些数据。)

 class beat_display_group {
 public:
     void draw_me(float, float, float, int);
     beat_display_group(int rhythmInt, int beatNumber);
     ~beat_display_group();
     int posy;
 private:
     int rhythmInt;
     int beatNumber;
     int posx;
 };

beat_display_group会收集一些数字,以便将每个群组放在屏幕上的正确位置。)

 class BackgroundGroupsHandler {
 public:
     void addBeat(Beat *b);
     vector<beat_display_group*> groups;
 };

这就是问题所在:

 void BackgroundGroupsHandler::addBeat(Beat *b) {
      beat_display_group *c = new beat_display_group(b->rhythmInt);

      // EXC_BAD_ACCCESS ON THIS LINE:
      groups.push_back(c);
 }

有时gdb会将我带到stl_vector.h

  // [23.2.4.2] capacity
  /**  Returns the number of elements in the %vector.  */
  size_type
  size() const
  { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }

和其他时间new_allocator.h

  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  // 402. wrong new expression in [some_] allocator::construct
  void 
  construct(pointer __p, const _Tp& __val) 
  { ::new(__p) _Tp(__val); }

  void 
  destroy(pointer __p) { __p->~_Tp(); }

1 个答案:

答案 0 :(得分:4)

问题很可能是您正在调用BackgroundGroupsHandler的{​​{1}}是addBeat或者是无效指针。问题显示在NULL代码中,因为您使用的是std::vector,由于groups无效,该问题无效。