Назначение построенных по умолчанию ошибок vector<int*>::const_iterator
в Visual Studio 2010. Я пробовал это на 5 системах Visual Studio 2010, у которых есть Service Pack 1. Он не работает на 3/5 машинах, я смог определить, что вызывает отказ в трех системах, но я не могу найти отчет об ошибке.
Вот код:
#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;
, оптимизировано в Release, поэтому этот минимальный пример будет работать только в Debug. Но в Debug возникает ошибка:
Необработанное исключение в 0x01071e14 в файле test.exe: 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, но проблема не была решена. Есть ли скрытый патч, который мне нужно пойти куда-нибудь, чтобы добраться? Я не могу найти эту проблему в любом месте, поэтому я также не могу найти информацию о патче.