Zugriffsverletzung?



  • Also mein code sieht etwa so aus:

    class bar
    {
    public:
        bar(unsigned,unsigned);    //steht woanders...
    };
    
    bar* generate_bar()
    {
        return new bar(4,7);
    };
    
    class foo
    {
    private:
        vector<bar*,unsigned> vec;
    public:
        foo()
        {
            for(unsigned i=0;i<100;++i)
                vec.push_back(std::pair<bar*,unsigned>(generate_bar(),0));    //hier der Fehler
        };
    };
    

    Beim debugging sagt man mir:

    Unbehandelte Ausnahme bei 0x00426ee5 in foo.exe: 0xC0000005: Zugriffsverletzung-Schreibposition 0x00000000.
    

    /edit: Ich habe nix verändert, aber nu gibts keinen Fehler mehr. Von mir aus kann der Beitrag gelöscht werden...



  • Hi,

    Mich wundert es das das ganze überhaupt kompiliert
    wird.

    Das verstehe ich ja noch:

    vec.push_back(std::pair<bar*,unsigned>(generate_bar(),0));
    

    aber das kann nicht sein:

    vector<bar*,unsigned> vec;
    

    du meintest wohl:

    vector< std::pair<bar*,unsigned > > vec;
    


  • Ja, du hast recht. Ich hätte wohl nicht die Nach durchmachen sollen...



  • OK, jetzt hab ich ne Zugriffsverletzung...

    Unbehandelte Ausnahme bei 0x00434c68 in genetic.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x0000010d.
    

    Sie KÖNNTE aus dieser

    while(i!=input.end())
    		delete i++->first;
    	input.erase(input.begin()+size-1,input.end());
    

    Stelle stammen. Es handelt sich um den Vektor, first wurde dynamisch allokiert...
    Der debugger meint, der Fehler würde in der Zeile

    /* verify block type */
                _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
    

    der Datei dbgdel.cpp stammen, was mir natürlich ungemein hilft 😃 ...


Anmelden zum Antworten