2015-12-20 205 views
0

我试图从我创建的类使用std :: copy C++函数复制的对象的列表,但函数崩溃接下来的错误消息:0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF在 MyProject.exe在0x00007FFA91BAC570(msvcr120.dll)C + +:std ::复制失败,访问冲突读取位置错误

未处理的异常。

这个类非常简单,我不知道什么会导致复制函数崩溃这样的错误。 类看起来如下:

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()); 

谁能帮助?

+5

你必须使用'inserter' – Jarod42

+4

为了扩大是,'NewObjectsList'是空的,而' std :: copy'不会调整它的大小。 – hlt

+2

为什么不'名单 NewObjectsList = objects'? – LogicStuff

回答

4

std::copy不调整输出,让你拥有前调整您的容器或使用特殊的迭代其中插入元件。

您可以使用下面的代码。

std::copy(objects.begin(), objects.end(), 
      std::inserter(NewObjectsList, NewObjectsList.end())); 

正如评论所指出的,在你的情况,你可以直接做一个副本:

list<XMLObjects> NewObjectsList = objects; 
+1

或简单地'std :: back_inserter(NewObjectsList)' –