Größe eines Arrays (dynamisch oder statisch)



  • Hi,

    ich benutze Dev-C++ unter WinXP und habe ein Problem mit der Größe eines Arrays.
    Hier ist der code

    […]
    unsigned long int og;
    cin >> og;
    unsigned long int primzahl[og];
    […]

    Das funktioniert bis zum Wert für "og" von 520.000. Bereits bei 521.000 macht das Programm nach dem Start nichts mehr, sondern kehrt (am Prompt) sofort zur Eingabeaufforderung zurück.
    Das gleiche passiert übrigens, wenn ich die Array-Größe statisch vorgebe:

    unsigned long int prime[521.000];

    Ich habe schon alle Arten von Variablentypen ausprobiert, aber nichts hilft... 😞

    Gruß
    Tom



  • Dein Code dürfte gar nicht kompilieren, da Arrays mit variablen Längen unter C++ nicht erlaubt sind. Das ist eine G++ Erweiterung. Wenn du mit -pedantic kompilierst, bekommst du auch einen Fehler.

    Zu deinem Problem: Benutze einfach ein dynamisches Array:

    #include <vector>
    
    unsigned long int og; 
    cin >> og; 
    std::vector<unsigned long> primzahl(og);
    


  • Hi Ponto,

    danke für deine Antwort.
    Auch ohne die Zeile

    std::vector<unsigned long> primzahl(og);

    wirklich zu verstehen, habe ich mein Programm angepaßt und es läuft !!! 🙂 🙂
    Bin halt noch am Lernen, war noch nicht bei Vektoren, aber kommt schon noch.
    Super, danke!

    Gruß
    Tom



  • std::vector<unsigned long> primzahl(og);

    Sie besagt, dass du einen Vektor primzahl vom Typ unsigned long mit og Elementen anlegst.

    Die Klasse Vektor ist eine Klasse zum darstellen von Arrays. (Wie der Name schon sagt). Nur das sie zusätzlich noch "extra-Feautures" (Extra Methoden zum einfacheren benutzen der Klasse) mitbringt und sehr viel komfortabler zu bedienen ist (Du musst dich z.B. am Anfang nicht zwingend die Größe des 'Arrays' festlegen).

    //Edit:
    Falls du jedoch selbst mehr die Verantwortung für deine Arrays übernehmen möchtest kannst du auch folgendes schreiben:

    ...
    std::cin >> og;
    unsigned long* primzahl = new unsigned long[og]; // Dynamisches Array mit og Elementen anlegen.
    
    // Hier mit primzahl arbeiten
    
    delete[] primzahl; // Speicher wieder freigeben (WICHTIG)
    ...
    

    Caipi



  • Hallo Caipi,

    alles klar, vielen Dank!

    //Edit:

    Deinen Edit schaue ich mir mal in Ruhe an, nochmals Danke. 😋

    Gruss
    Tom





  • @Artchi

    Gute Erklärung und weitere gute Tips auf deiner Website, danke.

    Tom


Anmelden zum Antworten