stapelfehler bei array-deklaration
-
pardon! beim nächsten mal...
die methode funktioniert aber nicht für mehrdimensionale arrays, oder?
-
neu_hier schrieb:
pardon! beim nächsten mal...
die methode funktioniert aber nicht für mehrdimensionale arrays, oder?doch. aber die syntax ist ein weng gemein. am besten, man macht erstmal mit typedef was einfacher.
typedef double zeile[1000]; zeile *array=new zeile[1000]; array[17][38]=5;
vor den leuten, die es ohne typedef schaffen, ziehe ich meinen virtuellen hut.
-
volkard schrieb:
vor den leuten, die es ohne typedef schaffen, ziehe ich meinen virtuellen hut.
Ich wuerde ihnen eher ein Schild, wo mit grossen Buchstaben "Masochist" geschrieben steht, ueberreichen
-
interessiert mich jetzt, kA ob es an der Uhrzeit liegt, aber ich verlange eine Erklärung!
-
Strogij schrieb:
interessiert mich jetzt, kA ob es an der Uhrzeit liegt, aber ich verlange eine Erklärung!
Was interessiert dich?
Wie es die masochisten machen?etwa so
char** p: p=new char*[10]; for(int i=0; i<10; ++i) p[i]=new char[100]; //do something for(int i=0; i<10; ++i) delete [] p[i]; delete [] p;
schoen simpel, gell?
und vorallem so schoen schnell, weil es so wenig news gibt
-
Shade Of Mine schrieb:
for...new...
dafür gips keine anerkennung. das haste aus dem spiele-forum kopiert.
ich meinteint (*a)[1000]=new int[1000][1000];
-
volkard schrieb:
Shade Of Mine schrieb:
for...new...
dafür gips keine anerkennung. das haste aus dem spiele-forum kopiert.
so machen es aber alle
ich meinte
int (*a)[1000]=new int[1000][1000];
das ist wirklich krank
-
@neu_hier
Um noch mal darauf zurückzukommen, warum das eine geht und das andere nicht.
Nun, deine erste Version legt den Speicher auf dem Stack an, und Stackspeicher ist nun mal begrenzt. Es wird bereits beim Programmstart festgelegt, wieviel Stackspeicher einem Programm zur Verfügung steht und das lässt sich dann auch nicht mehr ändern. Bei gängigen 32 bit Programmen liegt die verwendete Grösse bei ca. 1 - 4 MB. Wenn dein Programm also 1 MB oder gar weniger an Stack hat, ist es ziemlich wahrscheinlich, dass du bei deinem Array mehr Speicher haben willst, als noch vorhanden ist. Schliesslich brauchen lokale Objekte, Funktionen, etc. ja auch noch was. Stackspeicher hat aber den Vorteil, dass das Reservieren nahezu nix an Zeit kostet. Den Stack solltest du generell verwenden, wenn du a) geringe Mengen an Speicher brauchst und b) die Grösse des Speichers zur Laufzeit nicht mehr geändert werden muss.
Deine zweite Version legt das Array ja global an und wird damit direkt beim Compilieren in der Executable "registriert". Beim Starten des Programms wird dieser Speicher dann im Datensegment angelegt, und dort ist dann normalerweise soviel verfügbar, wie dein RAM hergibt. Dynamischer Speicher (mittels new) wird dort ebenfalls reserviert.
-
volkard schrieb:
ich meinte
int (*a)[1000]=new int[1000][1000];
Shade Of Mine schrieb:
das ist wirklich krank
und ich dachte ich hätte diese wundervolle Syntax in diesem Beitrag schön erklärt
Hat eigentlich schon einer erwähnt, dass man hier vielleicht lieber einen std::vector nehmen sollte?
-
Verdammt, daran habe ich doch gestern gedacht... Klammern für 'nen Zeiger auf ein Array mit x Elementen. Ob das an der Uhrzeit lag...?
-
HumeSikkins schrieb:
Hat eigentlich schon einer erwähnt, dass man hier vielleicht lieber einen std::vector nehmen sollte?
nein. das war gerade zu abwegig.