我的应用程序在我正在处理的应用程序中的以下行崩溃:
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
并且找不到任何问题与这个图书馆有关。
感谢任何/所有见解。
答案 0 :(得分:0)
您使用动态链接(例如/ MD)还是静态链接(例如/ MT)?当您在dll和amp;中都有内存操作时应用程序(例如,在dll中分配内存并在应用程序中删除它),它们都应该使用动态链接进行编译。 要更改链接,请转到属性页 - 代码生成 - 运行时库