У меня сложная проблема с отладкой, возможно, из-за недостатка понимания того, как c ++ управляет памятью. Код слишком длинный для публикации, но основные настройки таковы:
global_var = 0;
int main() {
for(i = 0; i < N; ++i) {
ClassA a;
new ClassB(a); // seems to be problem!
}
}
Для некоторых N
, global_var
повреждается (больше не равно 0). В конструкторах ClassA или ClassB нет ничего, что связывалось бы с global_var
.
Замена new ClassB(a)
на ClassB b(a)
, кажется, решает проблему, хотя это не позволяет мне делать то, что я хочу (создать boost::ptr_vector
с экземплярами new ClassB(a)
).
Есть идеи, что может пойти не так?
Обновление:
Я действительно делаю что-то вроде:
global_var = 0;
int main() {
boost::ptr_vector<ClassB> myobjects;
for(i = 0; i < N; ++i) {
ClassA a;
myobjects.push_back(new ClassB(a)); // seems to be problem!
}
}
Оба создают проблемы. Но почему это проблема? Должен ли я делать что-то еще, чтобы поместить кучу объектов в очередь? Я использую myobjects
как основу для шаблона команд.
Обновление
`classB 'выглядит так:
class ClassB {
public:
ClassB() {}
ClassB(ClassA a) : a_(a) {}
private:
ClassA a_;
}
ClassA - это простая инициализация списка (в реальной жизни).
Проблема?
Обновление
Я полагаю, что это может быть связано с тем, что global_var на самом деле является сложным матричным типом, и могут быть проблемы с тем, как он выделяет память.