【发布时间】:2015-12-20 15:26:23
【问题描述】:
我正在尝试从我使用 std::copy C++ 函数创建的类中复制对象列表,但该函数崩溃并出现下一条错误消息:
在 0x00007FFA91BAC570 (msvcr120.dll) 处未处理的异常 MyProject.exe:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF.
这个类非常简单,我不知道是什么导致复制函数因此类错误而崩溃。 该类如下所示:
class XMLObjects
{
private:
int id;
string name;
int leftUpCornerX;
int leftUpCornerY;
int rightDownCornerX;
int rightDownCornerY;
bool isFound; //it's true if this object was found in the OR file and in the GT file
public:
XMLObjects(){}
XMLObjects(int _id){ id = _id; }
XMLObjects(int _id, string _name, int _leftUpCornerX, int _leftUpCornerY, int _rightDownCornerX, int _rightDownCornerY) { id = _id; name = _name; leftUpCornerX = _leftUpCornerX; leftUpCornerY = _leftUpCornerY; rightDownCornerX = _rightDownCornerX; rightDownCornerY = _rightDownCornerY; isFound = false; }
~XMLObjects(){}
void setID(int _id){ id = _id; }
void setName( string _name){ name=_name; }
void setLeftUpCorner(int _leftUpCornerX, int _leftUpCornerY){ leftUpCornerX = _leftUpCornerX; leftUpCornerY = _leftUpCornerY; }
void setRightDownCorner(int _rightDownCornerX, int _rightDownCornerY){ rightDownCornerX = _rightDownCornerX; rightDownCornerY = _rightDownCornerY; }
void objectWasFound(){ isFound = true; }
int getID(){ return id; }
string getName(){ return name; }
int getLeftUpCornerX(){ return leftUpCornerX; }
int getLeftUpCornerY(){ return leftUpCornerY; }
int getRightDownCornerX(){ return rightDownCornerX; }
int getRightDownCornerY(){ return rightDownCornerY; }
bool isObjectFound(){ return isFound; }
};
复制函数的调用如下:
list<XMLObjects> objects;
objects.push_front(obj1);
objects.push_front(obj2);
objects.push_front(obj3);
list<XMLObjects> NewObjectsList;
std::copy(objects.begin(), objects.end(), NewObjectsList.begin());
谁能帮忙?
【问题讨论】:
-
你必须使用
inserter -
为了扩展它,
NewObjectsList是空的,std::copy不会调整它的大小。 -
为什么不只是
list<XMLObjects> NewObjectsList = objects? -
我还建议以下几点:(1)
XMLObjects构造函数应该至少初始化所有ints 和bools。并且 (2) 第三个XMLObjects构造函数应该将给定的_name移动到成员name中。