矢量push_back访问冲突

Jac*_*ack 2 c++ stl vector push-back

这可能是一个愚蠢的错误,但它让我疯狂地试图修复它.

我有一个结构:

struct MarkerData
{  
 int pattId;
 unsigned short boneId;
 Ogre::Matrix4 transToBone;
 Ogre::Vector3 translation;
 Ogre::Quaternion orientation;

 MarkerData(int p_id, unsigned short b_id, Ogre::Matrix4 trans)
 {
  pattId = p_id;
  boneId = b_id;
  transToBone = trans;
 }
};
Run Code Online (Sandbox Code Playgroud)

一节课:

class TrackingSystem
{
 public:
  void addMarker(int pattId, unsigned short boneId, Ogre::Matrix4 transToBone);

 private:  
  std::vector <MarkerData> mMarkers;
};
Run Code Online (Sandbox Code Playgroud)

现在,在addMarker方法中:

    void TrackingSystem::addMarker(int pattId, unsigned short boneId, Ogre::Matrix4 transToBone)
{
    mMarkers.push_back(MarkerData(pattId,boneId,transToBone));
}
Run Code Online (Sandbox Code Playgroud)

此push_back导致访问冲突"OgreAR.exe中0x00471679处的未处理异常:0xC0000005:访问冲突读取位置0x00000018.".

作为测试,我尝试了这个:

void TrackingSystem::addMarker(int pattId, unsigned short boneId, Ogre::Matrix4 transToBone)
    {
        std::vector <MarkerData> test;
        test.push_back(MarkerData(pattId,boneId,transToBone));
    }
Run Code Online (Sandbox Code Playgroud)

这很好用.

我究竟做错了什么?!谢谢!

Mar*_*k B 6

TrackingSystem你正在调用的对象addMarker死了(并且this指针无效.有可能超出范围,删除过早调用,或者从未正确创建(指针仍然为空)).

这更有可能,因为push_back到本地向量工作正常.