mehrdimensionales array kopieren



  • um ein noramales array zu kopieren mach ich einfach das hier:

    while(*arr++ = *array++);
    

    aber wie kann ich ein mehrdimensionales array kopieren?

    ein :

    alpha::alpha(float **arr)
    {int z = 0, s = 0;
                       while(arr[z++][])
                       {
                                       while(*arr[z][s++] = *array[z][s++]); 
                       }
    }
    

    funzt nicht!


  • Mod

    exigoner schrieb:

    um ein noramales array zu kopieren mach ich einfach das hier:

    while(*arr++ = *array++);
    

    viel spass damit...



  • danke; warum bekomme ich bei oberen bsp einen fehler?



  • Du schreibst und liest einfach wild in Speicher rum, der teilweise garnicht freigegeben sein muss. Kriegst du nie Speicherzugriffsfehler oder sowas????



  • ich hab jetzt ungetestet das probiert

    alpha::alpha(float **arr)
    {int z = 0;
                       while(*arr[z++]) while(*arr++ = *zdarray++);
    }
    

    Du schreibst und liest einfach wild in Speicher rum, der teilweise garnicht freigegeben sein muss. Kriegst du nie Speicherzugriffsfehler oder sowas????

    warum denn das?



  • 1. wo ist das abbruch-kriterium?
    2. was soll hier der zugriff auf den 2. index while(arr[z++][])?
    3. warum inkrementierst du s zweimal?

    schon mal was von for gehoert?



  • Macht kein Elefanten aus so nem kopieren...

    int a[10][5];
    	int b[10][5];
    
    	memcpy(b[0], a[0], 10 * 5 * sizeof(int));
    


  • FireFlow schrieb:

    Macht kein Elefanten aus so nem kopieren...

    int a[10][5];
    	int b[10][5];
    
    	memcpy(b[0], a[0], 10 * 5 * sizeof(int));
    

    đź‘Ž

    was ist mit dynamisch erzeugten array?



  • wo ist denn mein posting hin??? nochmal!

    alpha::alpha(float **b, int z, int s)
    {
    b = new float*[z];
    for(unsigned int i = 0; i < z; ++i)
         b[i] = new float[s];
    //
    for(int i = 0; i < z; i++)
    {
            for(int i = 0; i < s; i++)
            {
                    b[z][s] = zdarray[z][s];
            }
    }
    
    //
    for(unsigned int i = 0; i < 2; ++i)
          delete[] b[i];
    delete[] b;
    }
    

    das mĂĽsste funzen! aber z und s will ich weg haben!!!



  • exigoner schrieb:

    um ein noramales array zu kopieren mach ich einfach das hier:

    while(*arr++ = *array++);
    

    Mööp, Denkfehler. So kopierst du kein normales Array, sondern ein nullterminiertes Array, typischerweise char-Arrays (C-Strings). Du tätest gut daran, solchen Code nicht zu verwenden. Das mag zwar manchmal cool sein, alles so kurz und knapp wie möglich zu formulieren, kann aber schnell peinlich sein, wenn man gar keine Ahnung hat, was das eigentlich tut. Ungefähr wie mit nem Che-Guevara-T-Shirt rumzulaufen und zu denken das war ein Popstar 🙄



  • Da kommts drauf an wie du die im Speicher anlegst... Und da wir hier im c++ Forum sind behaupte ich dass man in den meisten Fällen die STL vorziehen sollte.



  • exigoner schrieb:

    wo ist denn mein posting hin??? nochmal!

    for(int i = 0; i < z; i++)
    {
            for(int i = 0; i < s; i++)
            {
                    b[z][s] = zdarray[z][s];
            }
    }
    

    das mĂĽsste funzen! aber z und s will ich weg haben!!!

    kann nicht funktionieren, da du mit s und z (spalten und zeilen nehm ich an) immer auf die selben elemente zugreifst. noch dazu liegen diese ausserhalb deines array -> zugriffsverletzung. ausserdem macht es sich ganz schlecht beiden schleifen-zählvariablen (i) den gleichen namen zu verpassen.

    typedef  unsigned long  u_long;
    
    for (u_long i = 0; i < z; ++i) 
      for (u_long j = 0; j < s; ++j)
        b[i][j] = zdarray[i][j];
    


  • @exigoner: Siehe eventuell auch meine Antwort zu deinem Post hier.

    Caipi



  • kann nicht funktionieren, da du mit s und z (spalten und zeilen nehm ich an) immer auf die selben elemente zugreifst

    gott, bin ich doof 🤡



  • @caipi
    ok, berĂĽcksichtigt, thx


Log in to reply