应用程序在std :: vector :: insert上崩溃

时间:2013-06-14 18:48:26

标签: c++ visual-studio-2010 vector crash

我的应用程序在我正在处理的应用程序中的以下行崩溃:

struct PointIndex
{
  int PointNr;
};
struct PointIndex PI = { 0 };
std::vector<PointIndex> MyVec;
MyVec.insert( MyVec.begin(), PI );

显示的代码相当简单(例如,MyVec实际上是C数据结构的成员,直到最近才是POD,但其中的一些指针被更改为向量来安抚Coverity),但是我正在工作的应用程序非常庞大,现在,我会对可能出错的一些提示表示赞赏。

Visual Studio 2010将此显示为调用堆栈:

MyAppl.dll!std::_Vector_const_iterator<std::_Vector_val<PointIndex,std::allocator<PointIndex> > >::operator+=(int _Off=-1)  Line 157 + 0x15 bytes   C++
MyAppl.dll!std::_Vector_iterator<std::_Vector_val<PointIndex,std::allocator<PointIndex> > >::operator+=(int _Off=-1)  Line 359  C++
MyAppl.dll!std::_Vector_iterator<std::_Vector_val<PointIndex,std::allocator<PointIndex> > >::operator-=(int _Off=1)  Line 371   C++
MyAppl.dll!std::_Vector_iterator<std::_Vector_val<PointIndex,std::allocator<PointIndex> > >::operator-(int _Off=1)  Line 376 + 0xc bytes    C++
MyAppl.dll!std::vector<PointIndex,std::allocator<PointIndex> >::emplace<PointIndex &>(std::_Vector_const_iterator<std::_Vector_val<PointIndex,std::allocator<PointIndex> > > _Where={PointNr=??? }, PointIndex & _Val={...})  Line 689 + 0x4a bytes C++
MyAppl.dll!std::vector<PointIndex,std::allocator<PointIndex> >::insert<PointIndex &>(std::_Vector_const_iterator<std::_Vector_val<PointIndex,std::allocator<PointIndex> > > _Where={PointNr=??? }, PointIndex & _Val={...})  Line 675 + 0x3b bytes  C++

崩溃时矢量为空,但从我看到的情况来看,begin对于空向量应与end相同,对insert迭代器应与end相同与push_back相同。

我四处寻找遇到类似问题的人,而我能找到的最接近的是c++ std::vector.insert crashes on debug but works on release,我已经检查了整个解决方案,以便拨打memset并且找不到任何问题与这个图书馆有关。

感谢任何/所有见解。

1 个答案:

答案 0 :(得分:0)

您使用动态链接(例如/ MD)还是静态链接(例如/ MT)?当您在dll和amp;中都有内存操作时应用程序(例如,在dll中分配内存并在应用程序中删除它),它们都应该使用动态链接进行编译。 要更改链接,请转到属性页 - 代码生成 - 运行时库