Richtige Verwendung von memset (memset vs. loop)



  • Hallo,
    Ich versuche die 3. Dimension eines folgendermaßen deklariertes Array mit 0 zu belegen

    size_t map[101][66][4];
    

    Der folgende Code funktioniert:

    for(size_t y=0;y!=66;++y)
    {
    	for(size_t x=0;x!=101;++x)
    	{
    		map[x][y][2]=0;
    	}
    }
    

    Wenn ich das ganze allerdings mit memset schreibe funktioniert es nicht(das array wird nicht komplett auf 0 gesetzt) Wie muss ich map richtig übergeben, damit memset das tut, was ich will?

    for(size_t a=0;a!=66;++a)
    	memset(&map[0][a][2], 0, 101*sizeof(size_t)); //funktioniert nicht
    

    Geht das mit einem dreidimensionalen Array überhaupt?


  • Mod

    Das Array liegt genau andersrum im Speicher, als du dir das denkst. Du hast bei dir 101 Blöcke von 66 Blöcken von 4 size_t nacheinander, nicht 4 Blöcke von 66 Blöcken von 101 size_t nacheinander.



  • typedef für die einzelnen Arrays könnte mehr Übersicht schaffen.



  • Hallo,
    ich meine so einfach müsste es sein ...

    memset (&map, 0, sizeof map);
    

    Gruß Frank

    edit sieht jetzt das nur die dritte Dimension genullt werden soll ...
    Mein Beitrag würde das ganze Array nullen, was nicht gewollt ist ...



  • Um es (nochmals) klar auszudrücken:
    Wenn du nur einen bestimmten Index der 3. Dimension deiner Map initialisieren willst (so wie dein Code mit der Schleife), dann kannst du diese NICHT durch ein memset ersetzen, da die Daten (wie SeppJ schon geschrieben hat) nicht am Block im Speicher vorliegen.


Log in to reply