Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » fehler beim lesen aus einer ini datei

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 <
000
02.07.2003, 20:13 Uhr
Joshi




C++:
int x[17];

void datenlesen()
    {
        int i;

        dat_ein.open(dateiname.c_str(), ios_base::in);

        for (i=0; i<=17; ++i)
        {
            dat_ein >> x[i];
        }
        dat_ein.close();
    }


seitdem ich diese funktion im programm habe kommt ein fehler wenn ich es starte. beim kompilen wird kein fehler angezeigt, nur beim ausführen , wenn die funktion aufgerufen wird "die anwendung aufgrund eines fehlers geschlossen"
irgendwas ist da nicht ganz sauber, kann mir bitte jemand sagen was!?

Dieser Post wurde am 02.07.2003 um 20:42 Uhr von Joshi editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2003, 20:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


mach am besten


C++:
x[i] = dat_ein.getchar(); // getchar war es glaub ich


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.07.2003, 22:20 Uhr
ao

(Operator)


Das Array x hat 17 Elemente. Die Schleife läuft aber von 0 bis (einschließlich) 17, füllt also 18 Elemente. Beim letzten Durchlauf greifst du hinters Ende des Arrays -> Access Violation.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.07.2003, 22:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oija hab ich wohl nicht genau hingeschaut, mach aus dem <= ein <, dann passt es (wie ao schon sagte)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.07.2003, 22:42 Uhr
Joshi



jo, danke jungs

vorher hatte ich da auchne 18 drin stehen, und die schleife von 1 bis 18 laufen lassen, da ging es auch nicht.

jetzt habe ich alles gleich gelassen und lasse die schleife von 0 bis 17 laufen, und es klappt.


frage: muss das array bei null anfangen ? also man darf nicht einfach mit 1 begnnen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.07.2003, 00:50 Uhr
Alf



Ein Array beginnt immer bei 0 und endet beim Deklarationswert - 1.


C++:
#define ARRAY_MAX    17

int Index = 10;

int Array[ARRAY_MAX];

if(Index >= 0 && Index  <= ARRAY_MAX)
{
Array[Index] = 4711;
}


Dieses Prog würde nie über die Grenzen des Array schreiben egal welchen wert du der Variable Index zuweist. Und du kannst denn wert von ARRAY_MAX ändern ohne dir sorgen zu machen.
--
Mfg

Andy

Dieser Post wurde am 03.07.2003 um 00:56 Uhr von Alf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.07.2003, 01:20 Uhr
Pablo
Supertux
(Operator)


Genau wie Alf schon gesagt hat, ein Array begint bei 0. In der Informatik ist es sehr üblich, dass alles bei 0 anfängt, was ich für logisch halte, weil 0 die erste natürliche Zahl ist und (in unseren Zahlensystem) 9 die zehnte Zahl. Alle anderen Zahlen (> 9) sind nur eine Kombination von den 10 Basiszahlen.

Bei Arrrays muss du immer aufpassen, dass die Zahl, mit der du das Array deklarierst (sagen wir mal n) ist nur die Anzahl von Stellen, die das Array zu Verfügung stellt. Die größte Stelle, die man erreichen kann ist array[n-1].

In anderen Sprachen, wie in Visual Basic, kann man dem Compiler sagen, dass er beim 1 anfagen soll, aber was soll's, eben, das ist nur Visual Basic. Andere Sprachen teilen dir mit, wenn du auf array[n] zugreifst, weil du nur n Elemente zur Verfügung hast aber du willst dann das n+1. Element zugreifeb. C/C++ sagt dir das nicht, sondern macht deine anderen Variablen kaputt, so kann es sein, dass du folgendes hast:


C++:
int z = 45147;
int array[10];
// Array initialsieren
array[10] = 2;
cout << z << endl;



So könnte es sein, dass die Ausgabe 10121121210 ist, keine Ahnung, der Wert von z wird überschrieben und zwar mit einem sinnlosen Wert, vielleicht passiert nicht direkt bei z sondern bei einer anderen Variable, also vorsichtig damit!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.07.2003, 10:51 Uhr
~Schlaumayer
Gast


Nana, Alf, haben wir denn da nicht wieder Index <= ARRAY_MAX??
Ich würde mal sagen < is besser, ansonsten musst du dir wieder Sorgen machen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.07.2003, 11:15 Uhr
Alf



Oh!

Da habe ich woll etwas zu schnell getippt!

Ja richtig, Schlaumayer!
--
Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: