Eigenartige Programmausgabe
-
Wie kommt das folgende Phänomen zustande:
Erzeugt man ein File, das mit den
folgenden Zeilen beginnt:#include <stdio.h>
#define STRL 65536
void main ()
{
printf ("hallo") ;sodann gefolgt von
15 Zeilen
der Formchar s1 [STRL] ;
.
.
.
char s15 [STRL] ;und zum Schluss
}dann gibt das Programm nach "Ubersetzung mit
bcc32 den String "hallo" aus.
Fügt man aber eine 16te Zeilechar s16 [STRL] ;
hinter der 15ten an,
so gibt das Programm
kein "hallo" aus.Es kommt aber noch eigenartiger.
Definiert man 16 Strings der obigen Form,
und definiert STRL als 64608,
dann gibt das Programm erwartungsgemäß
"hallo" aus.
Erhöht man STRL auf 64609, dann
gibt es kein "hallo" aus.Wie kann man das Problem umgehen ?
-
Die Umgebung ist Compiler BCC55, Kommandozeile von Windows XP
-
Vielen Dank für die große Resonanz auf dieses Problem
Inzwischen frage ich mich. ob das Problem daran liegen
kann, daß der Bereich für Konstanten durch 1 MByte begrenzt
ist oder sowas, denn 64K*16 ist ja 1 MByte. Obwohl 1 MByte
heutzutage ja keine Größenordnung mehr ist für Datenspeicher-Bereiche.
-
Da Du die Felder lokal innerhalb von main deklariert hat, werden sie über den Stack laufen - und der ist sehr wohl limitiert.
EDIT: füge mal ein static vor die Definitionen, dann müsste er es auslagern, und es läuft.
-
Danke, Bitsy !
Gruß.