Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Arrays und Dos

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
12.11.2003, 00:26 Uhr
Hans
Library Walker
(Operator)


Hi,

rechnen wir doch einfach mal nach: ein int ist unter DOS ist 16 Bit gross.
Demnach benötigtst Du für Dein array[1000] genau 1000 x 16 bit, bzw. 1000 x 2 Byte. Das macht dann zusammen 2000 Byte. Bei dem array[2000] sind es entsprechend 2000 x 2 Byte, also 4000 Byte.
Bleibt jetzt also nur noch das Speichermodell, das wahrscheinlich die Probleme macht. Durchforste also mal den Quelltext nach globalen Variablen, und rechne deren Speicherbedarf nach. Wenn Du da auf mehr als 64KB kommst, liegt es am Speichermodel. Dann siehe nach, mit welchem der Compiler gerade arbeitet.
Du schreibst, Du arbeitest mit Borland C++ 4.0; demnach hast Du nicht nur 3, sondern 6 verschiedene Speichermodelle zur Auswahl. Unter Turbo C++ findet man diese Auswahl im Menü: Optionen/Compiler/Code Generation. Dort kann man das benötigte Speichermodell auswählen. Ich nehme an, das dürfte unter BC4 nicht sehr viel anders sein.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 12.11.2003 um 00:31 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
12.11.2003, 17:41 Uhr
~landus
Gast


Hallo,

Also ich bin mit neinem Problem schon etwas weiter, obwohl ich es nicht verstehe geht es jetzt....

In dieser Form hat mir das Programm oft ab der 3 Zeile in der Ausgabedatei nur noch "lustige" Sachen ausgegeben.


C++:
#include <stdio.h>

int main( void )
{    
    int anz,a;
    unsigned int messwert[2000];
    FILE* datei;

    printf("Wie viele Messwerte? (max. 2000) ");
    scanf("%d",&anz);

    printf("\nEs werden %d Werte aufgezeichnet",anz);

    for(a=0; a<anz; a++)
    {

         messwert[a]=a;

    }
    
    datei=fopen("werte.txt","w");
    
    

    for(a=0; a<anz; a++){
        fprintf(datei, "[%04d]\n",messwert[a]);
        
    }

    fclose(datei);
    
    printf("\n\n\nDatei <werte.txt> wurde geschrieben\n\n");

    getchar();
    return 0;
}




Wenn ich messwert[] auf 1000 dimensioniert habe (und natürlich auch nur 1000 werte aufnehme) dann hat es funktioniert (siehe. vorherige postings).

Jetzt habe ich messwert[] global definiert also vor main und jetzt gehts.. ??? kann mir das jemand erklären?
Unter Linux und mit meinem 32bit c++-compiler ging es auch vorher ohne Probleme

Wie gesagt ich arbeite mit Borland 4 und compiliere für dos 16 bit und Speichermodell large.

Danke für Eure Hilfe

landus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
12.11.2003, 20:02 Uhr
(un)wissender
Niveauwart


Könnte ein Stackproblem sein, globale Sachen müssen nicht auf dem Stack sein.
Dann deklariere es halt global.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
12.11.2003, 21:32 Uhr
kronos
Quotenfisch
(Operator)


ööhm, das ist alles graue vorzeit und brauche mir mit 2.4.21-kernel darüber keine gedanken zu machen oder?
ich bin nämlich ebenfalls am verzweifeln mit meinen arrays!!
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
13.11.2003, 09:47 Uhr
virtual
Sexiest Bit alive
(Operator)


@kronos
Das Problem scheint mir DOS spezifisch zu sein.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
13.11.2003, 15:37 Uhr
Hans
Library Walker
(Operator)


Hi,
also die Sache mit dem Stack klingt auch einleuchtend. Ich hab mir das jetzt noch mal genauer angesehen. Es gibt auch noch die Möglichkeit, dem Linker mitzuteilen, wie gross der Stack für das Programm maximal sein darf.
Dabei fiel mir dann auch der Heap auf. Das ist jener Speicherbereich, aus dem einem das BS (hier also DOS) Speicher zur Verfügung stellt, der mit malloc & Co angefordert wird. Dessen Grösse kann man auch festlegen, so dass das Programm nur maximal X KB Speicher zur Verfügung hat.

Einstellen kan man das auch wieder im Optionen-Menü irgendwo; ich hab jetzt nur die Kommandozeilenoptionen (aus der Hilfedatei kopiert ):

/H:xxxx Specifies application heap reserve size
/Hc:nnnn Specifies application heap commit size
/S:xxxx Specifies application stack reserve size
/Sc:xxxx Specifies application stack commit size

Hoffe, damit findest Du den Fehler.

Ach ja, das Programm, das Du oben gepostet hast, läuft bei mir unter Win95 ohne Probleme. Unter DOS hab ichs nicht getestet.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 13.11.2003 um 15:40 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: