Ich versuche, die Methode clear() auf einem std :: map, ohne sich eine "Exception geworfen aufzurufen: Lesezugriff violation._Pnode 0xDDDDDDDD wurde . ".std :: map.clear() wirft eine Lesezugriffsverletzung
//I have narrowed down the error to this group of code
#include "stdafx.h"
#include <map>
#include <iostream>
class Input
{
std::map<int, bool> pressedKeys;
std::map<int, bool> heldKeys;
std::map<int, bool> releasedKeys;
public:
void Update()
{
heldKeys.clear();
pressedKeys.clear();
releasedKeys.clear();
}
};
class Window
{
private:
Input * input;
void Update()
{
input->Update();
}
public:
Window()
{
input = &Input();
while (true)
{
this->Update();
}
}
};
int main()
{
Window w = Window();
}
Die Ausnahme geschieht immer auf "heldKeys.clear();" Der Debugger in Visual Studio bringt mich auf eine Seite namens "xtree." Der Code, der folgt, ist der Code um, wo die Ausnahme geschieht in „xtree:“
void _Erase(_Nodeptr _Rootnode)
{ // free entire subtree, recursively
for (_Nodeptr _Pnode = _Rootnode; !_Pnode->_Isnil; _Rootnode = _Pnode) //The error occurs here
{ // free subtrees, then node
_Erase(_Pnode->_Right);
_Pnode = _Pnode->_Left;
_Alnode& _Al = this->_Getal();
_Alnode_traits::destroy(_Al, _STD addressof(_Rootnode->_Myval));
_Node::_Freenode0(_Al, _Rootnode);
}
}
ich keine Ausnahmen erwarten. Ich bin die Ausnahme bekommen „Ausnahme ausgelöst: Lesezugriff Verletzung _Pnode 0xDDDDDDDD war..“ Wenn mehr Klarstellung erforderlich ist bitte kommentieren.
Bitte posten Sie ein [mcve]. – PaulMcKenzie
Das Problem ist nicht in dem, was Sie gezeigt haben. Das Problem liegt nicht im Microsoft-Code, es sei denn, Sie sind sehr unglücklich. – chris
Dieser Code wurde auch in die Frage eingegeben, anstatt aus Ihrem echten Programm kopiert und eingefügt zu werden. Sie haben 'heldkeys' in Ihrer Klasse deklariert, aber in Ihrer' Update() 'Funktion verwenden Sie' heldKeys' (Großbuchstaben ** K **). – PaulMcKenzie