Es gibt einen Beispielcode, der den Fehler als Balg auftritt. Im Freigabemodus funktioniert und druckt fünf '-'. Im Debug-Modus funktioniert es jedoch nicht und tritt ein Laufzeitfehler auf, der 'Array-Iterator nicht dereferenzierbar' ist.Array Iterator nicht dereferencable Fehler
Umgebung Details: Windows 7 64bit Visual Studio 2015 Update 2
Ich weiß nicht, warum es Devotion zwischen Release und Debug-Modus. Vielen Dank im Voraus.
#include <iostream>
#include <array>
static bool operator != (int * a, std::array<int, 5>::iterator &b)
{
return a != &(*b);
}
int main(void)
{
std::array<int, 5> arr = { 0,0,0,0,0 };
for (auto* it = &arr[0]; it != arr.end(); it++)
{
std::cout << "-" << std::endl;
}
return 0;
}
Beachten Sie, dass, obwohl es natürlich ist, dass es nicht definiert Verhalten in Bezug auf den Standard ist, das Verhalten tatsächlich in Bezug auf die spezifische Implementierung erklärt wird. Diese Erklärung ist, dass VC++ - Iteratoren im Debug-Modus solche Dinge überprüfen und Ausnahmen auslösen, wenn ein Iterator nicht korrekt verwendet wird. Und diese Prüfungen sind im Freigabemodus deaktiviert. –
@BenjaminLindley Sie sind genau richtig. MSVC unterstützt den Debug-Iterator, um die Verwendung eines falschen Iterators zu erkennen. https://msdn.microsoft.com/en-us/library/aa985982.aspx – brown