PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Frage #1: Feldgröße



Import-Script
09.08.2002, 21:22
Hi, da meine Fragen bei <a href="http://mitglied.lycos.de/quelltexthelper/" target=_top>http://mitglied.lycos.de/quelltexthelper/</a> <BR>nicht beantwortet werden, probiere ich es nun mal hier. <BR>Also meine erste Frage lautet: <BR>Ist in C/C&#43;&#43; die Feldgröße irgend wie begrentzt, weil wenn ich ein Feld folgend deklariere: <BR>char bytes[16][128]; <BR>geht das noch, aber bei 16&#42;256 und höher verabschiedet sich beim Ausf&uuml;hren der Rechner mit Blue-Screen. <BR>Gibt es als eine Möglichkeit mit größeren Feldern zu arbeiten? <BR> <BR>Beste Gr&uuml;ße, Marek

Import-Script
09.08.2002, 23:09
Das sind gerade mal 4 kB, die sollten einen PC nicht aus dem Tritt bringen. <BR>Das hilft dir jetzt nicht, ist schon klar. Ist mit der Adressierung der Feldelemente alles in Ordnung? Nicht, dass du auf Elemente zugreifst, die es nicht gibt.

Import-Script
11.08.2002, 15:52
Hi, <BR>Also mein Proggi sieht folgend aus: <BR> <BR>void main&#40;void&#41; <BR>{ <BR> char feld[16][128]; //x-Vektor, y-Vektor <BR> <BR> for&#40;int y=0;y&#60;128;y&#43;&#43;&#41; <BR> { <BR> for&#40;int x=0;x&#60;16;x&#43;&#43;&#41; <BR> { <BR> feld[x][y]=&#39;A&#39;; <BR> } <BR> } <BR> <BR> cout&#60;&#60;&#34;ende&#34;; <BR>} <BR> <BR>Das funzt auch noch so weit, ich bekomme die Ende-Meldung. <BR>Lege ich aber ein Feld mit der Größe 16&#42;256 und lasse dementsprechend den y-Vektor in der For-Schleife bis &#60;256 hochzählen, so wird das Programm nicht ausgef&uuml;hrt, sondern ich erhalte eine Fehlermeldung: <BR> <BR>TEST_039 verursachte eine allgemeine Schutzverletzung <BR>in Modul TEST_039.EXE bei 0001:00000160. <BR>Register: <BR>EAX=0000a5ef CS=cbe7 EIP=00000160 EFLGS=00000206 <BR>EBX=000808dc SS=cbef ESP=00001e7c EBP=00001e88 <BR>ECX=00000a20 DS=cbef ESI=000008d0 FS=069f <BR>EDX=000208dc ES=cbef EDI=000008e8 GS=0000 <BR>Bytes bei CS:EIP: <BR>26 ff 5f 02 07 eb c7 26 ff 57 02 07 eb c0 c3 00 <BR>Stapelwerte: <BR>00c6cbef 000008d0 089a236a 239f1e92 00000a20 1e980000 0a2000b7 00000000 00000000 1eac1ea1 1ea0000a 000022d8 1edc1ea1 00000000 1ea00010 38940000 <BR> <BR>Bei 16&#42;512 gibt es nur noch nen Blue-Screen :-&#40; <BR> <BR>Was also mach ich falsch? <BR> <BR>Gruß, Marek

Import-Script
12.08.2002, 00:13
Also bei mir geht&#39;s.

Import-Script
12.08.2002, 15:55
&#42;Hmpf&#42; <BR>Also, bei mir gibt das ne mittelschwere Konfusion, teilweise werden auch andere Programme mitgerissen &#40;Internetverbindung etc.&#41;. <BR>Kann das sein, dass mein Kompiler ne Macke hat und auf Adressen schreibt, die schon von anderen Proggis genutzt werden? <BR>Welchen Kompiler benutzt du denn, dass es funktioniert? <BR>Habe hier Turbo C&#43;&#43; 3.1 <BR> <BR>Gruß, Marek

Import-Script
12.08.2002, 16:37
Kenne die Programmierumgebung nicht. <BR> <BR>Bei anderen Compilern kann man einen Stacktest als Compileroption einschalten. <BR> <BR>Versuch mal den benötigten Speicherbereich per malloc&#40;&#41; anzufordern. <BR> <BR>Siegfried

Import-Script
12.08.2002, 21:21
Stimmt, am Stack könnte es liegen. <BR>Bruder_m, versuch mal, die Variablen als static zu deklarieren: <BR>static char[16][256] <BR>und/oder sie vor deiner main-Funktion &#40;also global&#41; zu deklarieren: <BR>static char[16][256]; <BR>void main&#40;void&#41; <BR>{ <BR>... <BR>} <BR>Lokale Variablen &#40;also solche, die nur innerhalb einer Funktion &#40;und main ist ja auch eine Funktion&#41; deklariert sind&#41; werden nämlich &#40;immer?&#41; auf dem Stack abgelegt, und der ist möglicherweise doch nicht so groß. <BR>Static heißt, die Variable bleibt auch zwischen zwei Funktionsaufrufen erhalten. Damit das geht, muss der Compiler sie im &#34;normalen&#34; Speicher &#40;also nicht Stack&#41; ablegen. <BR> <BR>

Import-Script
12.08.2002, 21:39
JUHUUUU!!!! <BR>Es geht! Habe es mit static gemacht und kann auch problemlos bis 16&#42;2048 also 32 kB anlegen . <BR>Bei 16&#42;4096 &#40;64 kB&#41; kommte dann schon ne &#34;ordentliche&#34; Fehlermeldung: <BR>Array Size too large; <BR>Size of &#39;feld&#39; is unknown or zero; <BR>Aber 32 kB reicht mir erst mal, wenn ich mal mehr brauchen sollte, dann richte ich halt mehrere Felder, als &#34;Seiten&#34; ein und beschreibe die nacheinander. <BR>Also DANKE. Endlich kann ich weiter arbeiten. Hast was gut bei mir. <BR> <BR>Gruß, Marek

Import-Script
18.08.2002, 16:06
Bei MS VisualC gibts solche Mätzchen nicht.

Import-Script
18.08.2002, 16:21
Jo, und wo kann man sich das Downloaden? <BR> <BR>Gruß, Marek

Import-Script
18.08.2002, 17:00
never mind...

Import-Script
18.08.2002, 22:07
Ähm? Und wie darf ich das jetzt interpretieren? <BR> <BR>Gruß, Marek

Import-Script
19.08.2002, 00:09
Ich meinte damit das es wohl schlauer von mir gewesen wäre hätte ich nichts geschrieben... <BR>Diese Software kostet nicht zu wenig. <BR>

Import-Script
19.08.2002, 00:12
Aso, dann iss das eh nix f&uuml;r mich. <BR>Kennst du eine gute Freeware-Version? <BR> <BR>Gruß, Marek

Import-Script
19.08.2002, 20:23
Bei Ebay eine ältere Version ersteigern? <BR>Ansonsten fällt mir nichts ein...

Import-Script
19.08.2002, 20:46
Ich glaube vom Borland C&#43;&#43; Builder gibt es eine kostenlose Kommandozeilen Version zum runterladen. Schau dich doch mal auf der Borlandseite um, da findest du bestimmt was.

Import-Script
19.08.2002, 21:07
Ok, danke Tobi, bin jetzt erst mal am Saugen <BR>&#40;179 MB!&#41;, werd mir die Sache mal zu Gem&uuml;te ziehen und schauen, wie ich damit zurecht komme. Weitere Fragen folgen sicherlich, aber daf&uuml;r haben wir ja jetzt das neue Forum ;-&#41; <BR> <BR>Gruß, Marek

Import-Script
26.08.2002, 14:10
Hi, <BR>wenn die Felder noch größer werden sollen, dann muß man das Speichermodell ändern. Per default steht es auf &#34;Small&#34; &#40;/Tiny&#41;. Wird mehr speicher benötigt, stell es einfach auf Huge. Dann kann der Compi die Speicherbereiche allerdiungs nicht mehr so effektiv &#34;anfahren&#34;. Das Proggi läuft langsammer. <BR> <BR>Zu Borland&#39;s Buuilder: <BR>Die 179MB sind eine Demoversion. Man muß sich die Version bei Borland freischalten lassen und diese funktioniert dann genau 31 Tage. Das habe ich mal gemacht. Nochmaliges Installieren gelingt dann nur nach Neuinstalation des Rechners und erneuter Anfrage des Codes. Hab&#39;s dann sein gelassen... <BR> <BR>Gruß <BR>Elmar