Array im Konstruktor Größe zuweisen



  • Hallo zusammen kann irgendwie nicht mehr richtig überlegen heute
    😕 😕 😕
    Also ich hab in meiner hpp ein array angelegt
    int daten [][]
    und im Konstruktor bekomme ich die beiden Größen w und l übergeben
    So und nun kommt halt die Große Lücke im Programm ich bekomm das mit den Zeigern nicht mehr richtig hin. Wie muss ich jetzt das Array richtig initialisieren???
    Hab zu erst mit einem vector von vectoren von int´s gearbeitet wenn mir da jemand die Zuweisung erklären könnte wäre super aber das mit dem einfachen array würde mir für heuet Abend glaub ich auch reichen 😉



  • #include <cstring> // memset
    
    class Foo
    {
     public:
        Foo(int x, int y);
    
     private:
        int** p;
    };
    
    Foo::Foo(int x, int y)
    {
        p = new int*[x];
        for(int i = 0; i < x; ++i)
        {
            p[i] = new int[y];
            memset(p[i], 0, y); 
        }    
    }
    
    #include <vector>
    using std::vector;
    
    class Foo
    {
     public:
        Foo(int x, int y);
    
     private:
        vector< vector<int> > v;     
    };
    
    Foo::Foo(int x, int y) :
    v(x)
    {
        for(int i = 0; i < x; ++i)
            v[i].resize(y, 0); 
    }
    

    mfg



  • terraner schrieb:

    memset(p[i], 0, y);
    

    Das funktioniert aber nicht, da memset zeichenweise arbeitet.



  • Das mit dem vector kappt aber
    und zwar einwandfrei
    😃 😃 Danke 😃 😃



  • Das mit dem vector kappt aber
    und zwar einwandfrei
    😃 😃 Danke 😃 😃



  • groovemaster schrieb:

    terraner schrieb:

    memset(p[i], 0, y);
    

    Das funktioniert aber nicht, da memset zeichenweise arbeitet.

    Stimmt. Fällt mir jetzt auch auf.

    memset(p[i], char(0x0), y);
    

    mfg



  • terraner schrieb:

    Stimmt. Fällt mir jetzt auch auf.

    memset(p[i], char(0x0), y);
    

    Nein, du verstehst nicht. Das setzt y chars auf 0, und nicht y ints.



  • groovemaster schrieb:

    Nein, du verstehst nicht. Das setzt y chars auf 0, und nicht y ints.

    👎
    "Stimmt. Fällt mir jetzt auch auf."

    *ohne kommentar*

    naja, next time... dann wird alles wieder gut!
    Danke für den Tipp!

    mfg



  • groovemaster schrieb:

    Nein, du verstehst nicht. Das setzt y chars auf 0, und nicht y ints.

    Veto: memset setzt die ersten y Bytes auf 0. Jetzt muss man nur noch wissen, wie Groß ein int ist.

    memset(p[i], 0, y*sizeof(int));
    


  • Killing me softly schrieb:

    Veto: memset setzt die ersten y Bytes auf 0.

    Wieso veto? 1 Byte ist in C++ doch 1 char. Zudem schreibt der C Standard folgendes

    The memset function copies the value of c (converted to an unsigned char) into
    each of the first n characters of the object pointed to by s.

    Wieso du also explizit von Bytes sprichst ist mir unverständlich.


Anmelden zum Antworten