bool * num = new bool[10^7];
-
..hello again;
ich hätte da mal gerne ein Problem:
warum kann ich sobald MAX>10^7 das array zwar noch anlegen, aber nicht mehr ansprechen?
Compilieren ohne Probleme, aber beim Ausführen gibt's: expression cannot be evaluatedconst int MAX=100000001; bool * num = new bool[MAX]; for(int i=2; i<MAX ;i++){ num[i] = true; //--------->expression cannot be evaluated } delete []num;
ich dachte dadurch, daß ich den Speicher mit new auf dem heap während der Laufzeit anlege, hätte ich genug Speicherresourcen. Obere Schranke?
-
hast du einen historischen compiler?
mach malbool * num = new bool[MAX]; if(num==0){ cout<<"kein speicher mehr und altes new!"<<endl; return 4711; }
falls der dann mit "kein speicher mehr und altes new!" aussteigt, mach die auslagerungsdatei größer. geht das auch nicht, sag uns welches bs du hast und welchen compiler.
ein wenig mehr bools kannste mit vector<bool> ansprechen. aber auch nur das achtfache.
geht echt 10^7 noch gut und geht 10^7+1 nicht mehr? so glatt ist keine speichergrenze. dann liegts am new, das bei deinem compiler dabei ist. dann haben da ein paar freaks völlig willkürlich reingeschrieben:
if(size>1.e7) return 0;//niemals wird ein rechner jemals soo viel speicher haben!
-
Visual C++ 6.0
peinlich[0]:Windows NTsorry[0]: für die schlampige Formulierung
MAX>10^7
, 10^7+1 geht noch gut 10^8 nicht mehr
bei MAX=10^8 steigt er mit "kein speicher mehr und altes new!" aus.
sorry[1]:, aber was bedeutet: mach die auslagerungsdatei größer
sorry[2]: peinlich[1]: vector<...> kenne ich noch nicht
(aber bitte nicht weitersagen), steht noch in meiner to-do-Queue
sorry[3]:bin noch ein Azubi...
-
Na dann sag uns doch mal wieviel Megabytes 10^8 Bytes sind...
-
freshman schrieb:
bei MAX=10^8 steigt er mit "kein speicher mehr und altes new!" aus.
ok, dein rechner hat nicht 100MB frei für deine spielchen.
das ist nomalerweise kein problem, er kann speicher auslagern (die inhlte auf die platte in ne datei (die auslagerungsdatei) schreiben und dafür ram freimachen, das den programm dan benutzen kann). dazu muss aber genug platz in der auslagerungsdatei sein. die kannste normalerweise auch selber größer machen. aber ich habe keine ahnung, wie das unter NT geht.
zur not google fragen oder in nem anderen thread hier im forum.sorry[2]: peinlich[1]: vector<...> kenne ich noch nicht
(aber bitte nicht weitersagen), steht noch in meiner to-do-Queue
kein problem. dann wollen wir dich auch nicht damit belästigen. ich hab eh das gefühl, daß ne bloße verachtfachung des speichers nicht wirklich viel bringt bei dir.
ach, andererseits, so wild ist es auch nicht.#include <vector>
#using namespace std;const int MAX=100000001;
vector<bool> num(MAX);
for(int i=2; i<MAX ;i++){
num[i] = true;
}
//kein delete mehr, das macht der destruktor von vector selber
-
@...:und was soll mir das sagen?
1 MB = 1024 KB = 2^10 KB = 2^10 * 2^10 B = 2^20 B = 1.048.576 B = 8.388.608 b
10^8 B = 95,367431640625 MBpost scriptum: hätte wohl lieber nichts von Azubi gesagt
-
freshman schrieb:
post scriptum: hätte wohl lieber nichts von Azubi gesagt
doch, schon ok.
der ... ist ein unregistierter, darauf mußte hier immer achten. dieser funkt offenbar nur rein und ärgert leute.
-
ne wollte niemanden ärgern. wollte nur wissen wieviel das ist, weil ich es selbst nicht ausrechnen konnte.
-
@volkard:
da lacht das Herz
'...'.delete(); //ne nur Spaß, da bist du wieder guest * p'...' = new guest; guest &'...' = p'...';
@all: wer programmiert dem armen '...' denn mal einen Taschenrechner?