C 程序悬挂在矢量驱动器中
C++ program hangs in vector destructor
i有一个带有一个字段的结构,该结构添加了#define:
struct MyType {
int somedata;
#ifdef HAS_INDEX
int index;
#endif
}
当我将实例添加到向量时,第一个重新分配发生时,程序将悬挂:
vector<MyType> myData;
myData.reserve(4);
myData.push_back(MyType{0,0});
myData.push_back(MyType{0,1});
myData.push_back(MyType{0,2});
myData.push_back(MyType{0,3});
myData.push_back(MyType{0,4}); // Program hangs
我在之前的行上设置了一个断点,然后逐步浏览了附件的过程。当旧的向量存储被交易时,破坏向量的函数似乎在Microsoft Visual Studio 2015编译器的Xmemory0上进入无限循环:
// TEMPLATE FUNCTION _Destroy_range WITH ALLOC
template<class _Alloc,
class _Ptr = typename _Wrap_alloc<_Alloc>::pointer> inline
void _Destroy_range1(_Ptr _First, _Ptr _Last, _Wrap_alloc<_Alloc>& _Al, false_type)
{ // destroy [_First, _Last), no special optimization
for (; _First != _Last; ++_First) // <----- infinite loop here with _First > _Last
_Al.destroy(_Unfancy(_First));
}
为什么该程序悬挂在那里?
(为清晰显示问题的问题)
我在大量调试后发现了问题。我在结构中有一个定义,该结构为结构增加了一个其他成员变量。当我构建具有该功能的库并在程序中包含标头时,该定义仅设置在其中一个项目中。
因此,第二个项目删除了for (; _First != _Last; ++_First)
循环中的数据,但具有一个数据结构,其成员比用于分配内存的结构更多。因此,循环跳过了实际数据的末尾。然后它获得_Last < _First
,并且循环不会终止,因为_First
仅在循环中增加。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- C 程序悬挂在矢量驱动器中
- 返回驱动器号列表的程序
- 应用程序无法访问映射的驱动器
- 如何在C++程序中查看我的硬盘驱动器目录
- 如何限制 MFC 应用程序仅从已知的 USB 闪存驱动器运行
- 识别Windows上程序的驱动器
- 如何在Qt应用程序中获取MAC OS中驱动器的文件格式
- 我的程序无法在窗口驱动器上写入
- 如何在我的C++程序中的特定日期/驱动器已满后删除linux系统中的文件
- c++ -确保硬盘(驱动器)在程序执行期间不空闲