Warum funktioniert folgendes simples Programm nicht
-
Hallo,
wenn ich folgendes Programm ausführe
int main() { int* p = new int(1000000000); for (int i=0 ; i<1000000000 ; ++i ) { printf("%i\n",i); *(p+i) = 0; } return 0; }
Bekomme ich nach knapp 3000 Schritten der For-Schleife plötzlich einen Speicherschutz-Fehler obwohl eigentlich genug Speicher vorhanden sein müsste, sieht einer warum das so ist?
Gruß
-
Ich bin mir unsicher, ob Du 3,7 GB Speicher allokieren kannst...
-
Danke für deine Antwort
Darin bestand mehr oder weniger der Test, das Betriebssystem müsste mir diesen ja gewähren (Stichwort virtuelle Speicherverwaltung etc) und beim allokieren, d.h. an der Stelle
int* p = new int(1000000000);
tritt der Fehler auch nicht auf, sondern erst in der For-Schleife, in der ich auf den reservierten Speicher zugreifen möchte und das auch erst nach ca. 3000 Iterationen.
Gruß
-
Prüfe mal, ob
p
zufällig0
ist.
-
Ich komme mit Euren Antworten nicht klar. Meiner Meinung nach alloziert er Speicher für einen int und initialisiert diesen mit 1000000000.
In der Schleife schreibt er dann ab dem 2. Durchgang fröhlich über die Speichergrenze hinweg.
Oder bin ich jetzt blöd?
-
Frage dazu schrieb:
Meiner Meinung nach alloziert er Speicher für einen int und initialisiert diesen mit 1000000000.
Richtig.
In der Schleife schreibt er dann ab dem 2. Durchgang fröhlich über die Speichergrenze hinweg.
Richtig.
-
Du solltest vielleicht runde Klammern durch eckige ersetzen....
-
Oh Mist, falsche Klammern -.-
Wie kann ich ein Programm schreiben, dass mir recht zügig den ganzen Speicher vollschreibt?
Wenn ich mit new Speicher für ein Array reservieren möchte, z.B. folgendermaßen
int* p = new int[n];
Dann ist das n hier auch durch den Compiler begrenzt.
Allokiere ich Speicher für viele Arrays (habs mit 5 versucht) mit maximaler Größe scheint der Speicher nicht direkt vom System angefordert zu werden, zumindest zeigt mir der Ressourcenmonitor keine großen Änderungen der Speicherauslastung anGruß