默认构造的赋值vector<int*>::const_iterator
Visual Studio 2010 上的错误。我已经在 5 个具有 Service Pack 1 的 Visual Studio 2010 系统上尝试过此操作。它在 3/5 台计算机上失败,我已经能够确定导致 3 个系统失败的原因,但我似乎找不到错误报告。
这是代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int*> vec;
int arr[3] = {};
for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) vec.push_back(arr + i);
vector<int*>::const_iterator initialized = vec.cbegin();
vector<int*>::const_iterator uninitialized;
initialized = uninitialized;
cout << "Hello World" << endl;
return 0;
}
一切都很清楚,除了cout << "Hello World" << endl;
在发布中进行了优化,因此这个最小的示例只会在调试中失败。但在调试中它给出的错误是:
test.exe 中 0x01071e14 处未处理的异常:0xC0000005:读取位置 0x00000000 时发生访问冲突。
比较链接的工作和非工作 MSVCP100D.dll 发现存在轻微差异,工作 .dll 的产品版本为:10.0.40219.325,非工作 .dll 的产品版本为:10.0.40219.1。
实际错误发生在
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility
再次比较工作版本和非工作版本表明工作版本已发生更改。非工作代码简单地说:
if (_Myproxu != _Right._Myproxy)
_Adopt(_Right._Myproxy->_Mycont);
工作代码说:
if (_Myproxy == _Right._Myproxy)
;
else if (_Right._Myproxy != 0)
_Adopt(_Right._Myproxy->_Mycont);
else
{ // becoming invalid, disown current parent
_Lockit _Lock(_LOCK_DEBUG);
_Orphan_me();
}
说了这么多,这是我真正的问题。我如何获得此更新?我已使用 Windows Update 更新到最新版本,但问题尚未解决。是否有一些隐藏的补丁需要我去某个地方才能获得?我在任何地方都找不到这个问题的记录,所以我也找不到有关补丁的信息。