2D Array will nicht
-
hallo zusammen,
habe eine kleines nerviges Problem: möchte ein 8000*20 String Array anlegen und es direkt mit Daten füllen. Die entsprechenden Daten habe ich auch. mein aktuller Versuch sieht ungefähr so aus:string Tabelle[8000][20] ={ {...},...,{...}};in { {...},...,{...}} habe ich meine Daten stehen und diese haben auch die richtige Größe. Der Fehler, den ich bekomme, besagt, dass ich meine 4GB Ram überschreite, meine Daten sind aber nie im Leben so groß.
habe in den letzten 2 Stunden schon einiges mit Allokieren versucht, aber irgendwie scheitert es an komischen Gründen immer.
kann mir da einer weiter helfen???
-
wtf
-
du legst dein array auf dem stack an. das ist der speicher der verdammt schnell, aber auch sehr klein ist.
wenn du es auf dem heap anlegst, hast du viel mehr platz.
nimm dir std::array oder std::vector, die regeln die grösser für dich
-
Nenn mal den genauen Fehler und wann er auftritt. Und willst du wirklich 160.000 Strings auf den Stack packen? Selbst wenn du keine Probleme mit der 4GB Grenze bekommen würdest, so würdest du doch schnell Probleme mit dem Stack bekommen, der meistens in der Voreinstellung nur ein paar MB groß ist. Wenn wir mal geschätzte 64 Byte Verwaltungsdaten pro String nehmen, dann ist das schon ein gewaltiger Teil davon.
-
Sag lieber, was Du machen willst, statt wie.
-
vielen Dank, ich denke std::vector wird das Richtige sein.
habe bisschen gegooglet und bin gerade so weit:vector<vector<string> > Tabelle(8000, vector<string>(20, ""));dieser Construktor initialisiert mir mein 8000*20 Array mit "". wie initialisiere ich es denn nun mit meinen Daten direkt???
-
std::initializer_list wenn du c++11 hast...
-
ich benutze CodeBlocks
habe folgenden code ausprobiert:class SequenceClass { public: SequenceClass(std::initializer_list<int> list); }; SequenceClass some_var = {1, 4, 5, 6};bekomme aber den Fehler "error: expected ')' before '<' token" für die Zeile "SequenceClass(std::initializer_list<int> list);". es scheint, dass c++11 nicht aktiviert ist. wie aktiviere ich es?
-
Aktivieren???
Entweder dein Compiler unterstützt C++11 oder eben nicht. Da gibts nix zu aktivieren.
-
Code::Blocks benutzt als Backend gcc, also musst du dem Compiler den Parameter -std=c++0x mitgeben.