Вектор структур push_back генерирует ошибку выделения памяти
У меня есть ошибка при выполнении первого push_back. Структура содержит перечисление.
Ошибка такова: "выброшено исключение: нарушение доступа на чтение._Pnext был 0xFFFFFFFFFFFFFFFF."
//Here are the definitions of the structure and both structures: //Pieces enum s_piece_e_tipo { RING, CYLINDER }; struct s_piece { s_piece_e_tipo tipo; double R1, R2, Z1, Z2; }; struct s_point { double xyz[3],potential,Efield,Q; }; //And here the class vectors definitions: class c_static2D { public: void mete_cylinder(double z0, double R, double iz, double potential); protected: vector<s_point> points;//Stores points at pieces vector<s_piece> pieces;//Stores all reactor pieces. } void c_static2D::mete_cylinder(double z0, double R, double iz, double potential) { s_point point{ { R,0,0 },potential,-777,-777 }; points.push_back(point); //============================THIS IS OK! s_piece pie{ s_piece_e_tipo::CYLINDER,R,R,z0,z0+iz }; pieces.push_back(pie); //============================THIS FAILS! }
Что я уже пробовал:
Как я уже сказал, это работает:
s_point point{ { R,0,0 },potential,-777,-777 }; points.push_back(point); //============================THIS IS OK!
Richard MacCutchan
Я только что попробовал этот код, и он работает нормально. Я думаю, что то, что вы показываете здесь, отличается от того, что вы тестируете.
Jochen Arndt
Я протестировал ваш пример кода с помощью G++ , вызывающего mete_cylinder() для локального экземпляра c_static2D в main (), и не получил никакого нарушения доступа.
Я предполагаю, что проблема находится в коде, не показанном вами. Возможный источник-поврежденный стек или куча из-за несвязанной записи. Другой источник может использовать разные версии библиотеки (из разных модулей - особенно при использовании статической компоновки - или один модуль использует отладочную, а другой-выпускную версию).
Javier Luis Lopez
Спасибо Йохен, это была проблема версии, которую я не мог отследить