Javier Luis Lopez Ответов: 0

Вектор структур 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

Спасибо Йохен, это была проблема версии, которую я не мог отследить

0 Ответов