Speicherzugriffsfehler (Speicherabzug geschrieben)



  • Dieser Fehler kommst wenn man diesen

    #include <iostream> 
    #include <random> 
    using namespace std;
    
    template<typename D>
    
    void experiment(const string &title, D &distrib, size_t size) {
        static default_random_engine e{};
        vector<size_t> counts;
        for (auto i=120*1000; i>0; i--) ++counts[distrib(e)];
        cout << title << ":" ;
        for (auto c : counts) cout << " " << c;
        cout << endl;
    }
    
    int main() {
        uniform_int_distribution<int> w6{0,5}; //Zahlen 1-6
        experiment("Wuerfel ", w6, 6);
    }
    

    Code mit den Flags g++ -std=c++11 -Wall -g -Werror Zufallszahlen.cpp -o Zufallszahlen übersetzt. Beim Ausführen kommt jegedlich "Speicherzugriffsfehler (Speicherabzug geschrieben)" dies. Bin unter Ubuntu unterwegs und g++ Version ist 4.8.2 Habe den Code aus einem C++11 Buch von Torsten T.Will. Was bedeutet die Fehlermeĺdung und was muss ich ändern?



  • g++ übersetzt das? <string> fehlt.

    DarkLord44 schrieb:

    Was bedeutet die Fehlermeĺdung [...]

    Es wird in Zeile 10 auf mit counts[distrib(e)] auf Vektorelemente zugegriffen, die nicht existieren.

    _DarkLord44 schrieb:

    [...] was muss ich ändern?

    Der Vektor muss (mindestens) size Elemente lang sein.
    Zeile 9: vector<int> counts( size )



  • Danke! Funktioniert! 🙂 👍


Anmelden zum Antworten