Vector Frage
-
vecc schrieb:
Aber wieso stürtzt das nicht ab wenn ich push_back verwende wie in meinem Beispiel?
Dein Code erzeugt undefiniertes Verhalten. Du kannst dich also nicht darauf verlassen, dass etwas definiertes passiert, auch kein Absturz.
-
Nochmal mit meinen eigenen Worten beschrieben: Du machst etwas, dessen Verhalten der C++ Standard nicht definiert (UB = undefined behaviour). Folglich kann irgendetwas passieren. Im besten Fall schmiert Dir das Programm sofort ab. Es kann aber natürlich auch sein, dass Du Müll irgendwo in den Speicher schreibst und Dir das erst auffält, wenn etwas anderes aufhört zu funktionieren oder Blödsinn zu machen scheint. Wie auch immer, du kannst Dich auf kein bestimmtes Verhalten verlassen. Und das erlaubt den Compilerherstellern und Bibliotheksautoren, die eine oder andere Überprüfung zu ersparen.
Tipp: Ziehe die Nutzung der Standardcontainer vor selbstgestrickten Sachen vor. Die meisten Anbieter lassen Dich einen Debug-Modus der Standardbiliothek einschalten, mit dem Du kleine Problemfälle testen kannst. Der Code läuft dann zwar langsamer, aber Du bemerkst dann solche Verwendungsfehler schon relativ früh, da viele der Vorbedingungen der einzelnen StdLib-Funktionen getestet werden. Siehe Doku Deines Compilers.
-
1. Die größe deines Vectors ist 4. Nicht 901

2: Arbeite bei sowas mit der at() Methode und nicht mit dem überladenen Index-operator. Die (at()-Methode) wirft eine std::out_of_range Exception (wenn der Index nicht stimmt), da erkennst du schnell was kaputt ist.bb

-
Hacker schrieb:
2: Arbeite bei sowas mit der at() Methode und nicht mit dem überladenen Index-operator. Die (at()-Methode) wirft eine std::out_of_range Exception (wenn der Index nicht stimmt), da erkennst du schnell was kaputt ist.
Mach das nicht. Und versuche erst recht nicht, fehlerhafte Indexzugriffe durch das Fangen der Exception zur Laufzeit zu reparieren. Die gehören ausgemerzt, und dazu ist das in
operator[]eingebauteassertideal. Schliesslich will ich nicht für richtige Indexzugriffe zahlen, das muss ich schon in genügend anderen Sprachen...
-
Nexus schrieb:
Hacker schrieb:
2: Arbeite bei sowas mit der at() Methode und nicht mit dem überladenen Index-operator. Die (at()-Methode) wirft eine std::out_of_range Exception (wenn der Index nicht stimmt), da erkennst du schnell was kaputt ist.
Mach das nicht. Und versuche erst recht nicht, fehlerhafte Indexzugriffe durch das Fangen der Exception zur Laufzeit zu reparieren. Die gehören ausgemerzt, und dazu ist das in
operator[]eingebauteassertideal. Schliesslich will ich nicht für richtige Indexzugriffe zahlen, das muss ich schon in genügend anderen Sprachen...Leidet die Performance? Wusst' ich garnicht.
-
Hacker schrieb:
Leidet die Performance? Wusst' ich garnicht.
Du dachtest das Testen des Index wäre gratis?
-
Ich bin der Meinung, die Exception wirft sich von selber.
-
vecc schrieb:
system("PAUSE");
[/cpp]Wenn Du plattformunabhängig programmieren möchtest, solltest "system("PAUSE");" weglassen, da es nur unter Windows funktioniert.
Ansonsten solltest Du auch noch die cstdlib mit einbinden.
-
Und hier ein huebscher Artikel von SideWinder wie man richtig verhindert, dass die Konsole automatisch schliesst.
-
redrew99 schrieb:
Wenn Du plattformunabhängig programmieren möchtest, solltest "system("PAUSE");" weglassen, da es nur unter Windows funktioniert.
Wenn Du glaubst, daß das das einzige Problem mit
system( )ist, soltest Du evtl. nochmal darüber nachdenken...
-
Swordfish schrieb:
Wenn Du glaubst, daß das das einzige Problem mit
system( )ist, soltest Du evtl. nochmal darüber nachdenken...Oder einfach diesen Artikel aus dem Forum hier lesen.