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(); }
答案 0 :(得分:4)
问题很可能是您正在调用BackgroundGroupsHandler
的{{1}}是addBeat
或者是无效指针。问题显示在NULL
代码中,因为您使用的是std::vector
,由于groups
无效,该问题无效。