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 Form

    char 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 Zeile

    char 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ß.


Anmelden zum Antworten