Array



  • Kleines Beispiel für ein dynamisches Array mit new/delete (ungetestet):

    int main() {
      int *iArray;
      int iElements;
      std::cout << "Wieviele Elemente eingeben?";
      std::cin >> iElements;
      iArray=new int[iElements];
      for(int i=0;i<iElements;i++) {
        std::cout << "Element " << i << "eingeben: " << std::endl;
        std::cin >> iArray[i];
      }
      for(int i=0;i<iElements;i++) {
        std::cout << "Eingegebenes Element " << i << ": " << iArray[i] << std::endl;
      }
      delete [] iArray;
      getchar();
    }
    

    Such auch mal nach std::vector...



  • helferlein schrieb:

    version 3 ist die gefährlichste.

    Wieso ist malloc/free gefährlicher als new/delete? Das würde ich so pauschal nicht stehen lassen, zumal new, soweit ich weiß, oft per malloc implementiert wird. Der einzige Unterschied ist doch, dass malloc/free keine Konstruktoren/Destruktoren aufrufen. Wenn man also nicht gerade malloc auf Klassen anwendet, gibt es imho keine Unterschiede in der Gefährlichkeit (oder vergesse ich da was?). Zudem hat man mit realloc eine bequeme Möglichkeit, ein Array nachträglich in der Größe zu ändern. Mit new geht das nicht, wenn man sich nicht was mit Umkopieren bastelt. Dass STL-Container die sicherste Variante und grundsätzlich zu empfehlen sind, ist natürlich klar.



  • ok realloc ist natürlich bequem aber trotzdem vergessen viele! das der parameter
    die byte größe angibt. wer an new[] gewöhnt ist vergisst schnell das
    * sizeof(datentyp).

    das keine konstruktoren aufgerufen werden ist natürlich auch eine fehlerquelle,
    lässt sich aber zum glück beseitigen

    class test
    {
    public:
        test(int){}
        ~test(){}
    };
    
    test *t = (test *)malloc(sizeof(test));
    t->test::test(1); // konstruktoraufruf
    
    //...
    
    t->~test();
    free(t);
    


  • hat funktioniert !
    vielen dank für die schnellen und stimmigen antworten !!!

    ich hätte da aber noch n problem mit zufallsgenerator
    er erzeugt zwar zufallszahlen jedoch hunderte mal nacheinander die selben
    (2 2 2 2 2, 77 77 77 77 8 8 8 8 8 8 etc )

    while (rmt_erg != rmt)
    {

    srand ( (unsigned)time (NULL) );
    rmt_erg = rand() % wertebereich +1;

    ++counter;

    }

    so erzeuge ich meine zufahlszahlen gibts da vielleicht bessere varianten ?



  • srand(time(0)) nur *einmal* aufrufen, zum beispiel als erste zeile in der main().



  • helferlein schrieb:

    ok realloc ist natürlich bequem aber trotzdem vergessen viele! das der parameter
    die byte größe angibt. wer an new[] gewöhnt ist vergisst schnell das
    * sizeof(datentyp).

    Gut, das ist natürlich ein Punkt. Aber ich sag mal, wer sich nicht mal an die Doku hält, ist selber Schuld...



  • Die erste Möglichkeit wäre, dynamisch Speicher zu allozieren, indem du malloc/realloc/calloc/free (eher C) oder new/delete (C++) benutzt. Die zweite, bequemere (und sicherere) Variante sind STL-Container wie beispielsweise std::vector.

    Die dritte sind variable Dimensionen laut C99 (dann kann man das free() nicht nicht vergessen).



  • flamer schrieb:

    Die erste Möglichkeit wäre, dynamisch Speicher zu allozieren, indem du malloc/realloc/calloc/free (eher C) oder new/delete (C++) benutzt. Die zweite, bequemere (und sicherere) Variante sind STL-Container wie beispielsweise std::vector.

    Die dritte sind variable Dimensionen laut C99 (dann kann man das free() nicht nicht vergessen).

    Na klar. Vergess ich immer, da ich mit dem VS arbeite. Da is' ja leider nix mit C99...



  • Na klar. Vergess ich immer, da ich mit dem VS arbeite. Da is' ja leider nix mit C99...

    Noch immer nicht? 😮



  • bgdnoy schrieb:

    Na klar. Vergess ich immer, da ich mit dem VS arbeite. Da is' ja leider nix mit C99...

    Noch immer nicht? 😮

    Kommt sicher im VS 2018! 😃


Anmelden zum Antworten