maximale anzahl an array elemente
-
hallo.
-
Die Grösse statischer Arrays hängt normalerweise von der Stackgrösse ab und ist system-/compilerabhängig.
Klingt mir aber nicht nach einer sinnvollen Anwendung. Wieso willst du die maximale Grösse kennen? So etwas brauchst du nicht wirklich.
-
Im Prinzip ist es so, ja. Doch bevor ein Array derart "überfüllt" ist, wird das Programm vorher noch abstürzen. Es gibt daher keine "Grenze".
kann ich dann irgend hierfür eine Konstante eintragen
Jo, klar, kannst alles machen:
const char *array=NULL; array=new char[45];Dem array wurden jetzt 45 Elemente hinzugefügt. Wenn du das array
deklarierst, solltest du stets darauf achten, dass es auf keinen leeren
Speicher zeigt. Da die Speicheradresse ziemlich hoch werden können
(Mach das mal und lass Windows 1 Woche lang laufen). Deswegen hab ich
sie hier mit NULL, also keinem Inhalt oder Adresse auf irgenetwas
zufälliges deklariert. Achja, falls du "new" noch nicht kennst, dass
reserviert neuen Speicher im RAM. Bzw. zeigt er für "array" an eine
genaue Adresse über die der Speicher reserviert wird. Deswegen auch
der Zeiger vom Datentyp "char" bei der Deklaration weil er einen Wert
zurückliefert und zwar die Speicheradresse.
-
arrayuser400 schrieb:
Höchstens soviele, wie size_t (ist plattformabhängig) adressieren kann. In der Praxis ist aber viel früher Schluss, je nach Stackgrößeneinstellung des Compilers oder Heapgröße, die das Betriebssystem dem Prozess zugesteht oder ... oder ...
Gruß,
Simon2.
-
way schrieb:
Im Prinzip ist es so, ja. Doch bevor ein Array derart "überfüllt" ist, wird das Programm vorher noch abstürzen. Es gibt daher keine "Grenze".
Es geht hierbei nicht um wirkliche Arrays, wie sie der Threadersteller beschrieben hat, sondern um mehrere Elemente, die hintereinander im Speicher liegen (dynamische Arrays). Bei statischen Arrays erhält man bereits eine Compilerfehlermeldung, wenn die Dimension zu gross ist.
Ausserdem muss auch bei dynamischer Speicheranforderung nicht zwingend das Programm abstürzen, es wird einfach immer mehr Arbeitsspeicher angefordert, und irgendwann wird die Auslagerungsdatei angenagt und der Computer wird ziemlich langsam...
way schrieb:
const char *array=NULL; array=new char[45];[...] Wenn du das array
deklarierst, solltest du stets darauf achten, dass es auf keinen leeren
Speicher zeigt. [...] Deswegen hab ich
sie hier mit NULL, also keinem Inhalt oder Adresse auf irgenetwas
zufälliges deklariert.Das ist aber ziemlich unnötig, wenn man es gleich in der nächsten Zeile belegt. Man sollte aber auch darauf achten, den Speicher wieder freizugeben.
P.S.: Es gibt nicht umsonst einen automatischen Zeilenumbruch.

-
Also mein Code sieht so aus:
char Keybuff[10], controlField[99999]; while(1) { strcpy(Keybuff, "/0"); recv(s2, Keybuff, sizeof(Keybuff), 0); strcat(controlField, Keybuff); SetDlgItemText(hwndDialog[2], IDC_EDIT1, controlField); }immer wenn was empfangen wird, dann wird es Keybuff zugewießen und dann in controlfield "getcatted". Ich kann Keybuff nicht direkt angeben, weil es immer den Text vom letzten durchgang auch noch anzeigen soll. Wie würdet ihr das umschreiben damit es besser klappt? Ich habe halt angst, dass controlField irgendwann platzt wenn das programm lange läuft. Für code wäre ich dankbar.
-
@Nexus
Lag auch in meiner Meinung, dass die Definition außerhalb der Deklarierung
liegt (:. Ahyo, hab ich wohl im Eifer des Gefechts vergessen:
Spädder wenn du die Elemente durchgelauft hast und due das Programm beendest,
geb die Elemente noch Frei bzw, lösche sie, und zwar so:delete[] array;
-
http://de.wikipedia.org/wiki/Liste_(Datenstruktur)
oder
schau dir mal die STL an...
z.B. VectorIst es das was du suchst?
-
@arrayuser
Wo liegt das Problem? Ich weiss, dass ich vor Graumer Zeit mal eine heftige
Acces Vialation hatte, dass heisst, die Elementenanzahl war zu Hoch. Kann
mich an 9999 erinnern, schraub deine Zahl doch mal runter. Und achja,
warum reservierst du den Speicher nicht einfach nach der Menge, du bekommst
sie doch rein? "99999" ist sogesehen der sichere Tod deines Programmes...(:
@Speedy
Lösch dein Beitrag lieber, dass hat rein garnichts hiermmit zu tun!
-
way schrieb:
@Speedy
Lösch dein Beitrag lieber, dass hat rein garnichts hiermmit zu tun!Nein Speedy, lass dein Beitrag stehen

-
char Keybuff[10], controlField[99999]; while(1) { strcpy(Keybuff, "/0"); recv(s2, Keybuff, sizeof(Keybuff), 0); strcat(controlField, Keybuff); SetDlgItemText(hwndDialog[2], IDC_EDIT1, controlField); }kann mir bitte einer den code effizient und sinnvoll machen? Vector oder so wäre auch gut wenn es damit besser ist. Wäre echt cool

-
Nein. Das würde dir auch gar nichts bringen.
Lies dich doch einfach zur STL ein, hier z.B. erhältst du eine sehr gute Übersicht.
-
es soll mir ja auch nichts bringen brauch das für die Uni könnte es bitte wer umformen?
-
arrayuser400 schrieb:
es soll mir ja auch nichts bringen brauch das für die Uni könnte es bitte wer umformen?
Nein, so erst recht nicht.

-
Die Dreisstheit der Gäste wird immer größer...
-
.< ich programmiere ja eigentlich C aber es muss ja unbedingt mit vectoren sein
-
was würdet ihr denn dafür verlangen t.t
-
was würdet ihr denn dafür verlangen t.t
5000€ und eine Forensperre für Dich!
-
Sollte eigentlich nicht allzu teuer werden. Schau vielleicht mal im Projekte-Forum nach.
Aber wenn du das für die Uni machen musst, wird dir wohl jemand beigebracht haben, wie so eine Aufgabe zu bewerkstelligen ist...
-
way für 16 Posts nimmst du ja ganz schön was rauß!
So ein kleiner wicht sollte lieber den ball flach halten