0

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

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 在调试时崩溃但在发布时有效,我检查了整个解决方案的调用memset但没有找到任何相关的到这个图书馆。

非常感谢任何/所有见解。

4

1 回答 1

0

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

于 2013-11-12T11:19:11.843 回答