Hier initialisierte ich a [3]. In der for-Schleife füttere ich den Eingang 100 mal zu a [] und übertrifft die Indizes [3].
Warum gibt es keinen Segmentierungsfehler direkt nach , wenn i gleich 4 ist.
Eingang
1 2 3 4 5 6 7
Ausgabe
Index Value 0 1 1 2 2 3 4 0 5 5 6 6 7 7
Ausgang ist falsch, wenn Index gleich 4 0 gedruckt. Erwartet 4Warum verursacht man keinen Segmentierungsfehler?
Antwort
Leider C-und C++ - Programme für den Debugging-Programmierer normalerweise nicht segfault, wenn Sie über das Ende eines Arrays schreiben. Stattdessen wird es normalerweise stillschweigend über die Zeigerarithmetik schreiben, bis - wenn das Betriebssystem es erlaubt. Dies überschreibt häufig andere Variablen oder sogar Programmcode, was zu verwirrenden und unvorhersehbaren Fehlern führt.
Ich habe das Wort "normalerweise" hier verwendet, weil nach den Standards das "undefined Verhalten" ist - das heißt, der Compiler und die Laufzeit können alles tun, was sie wollen.
Bei der Entwicklung und beim Testen kann es sehr nützlich sein, eine Bibliothek wie electricfence
zu verwenden, die zusätzliche Überprüfungen in Speicheroperationen einführt und Ihr Programm so ausfallen lässt, wie Sie es erwarten.
- 1. Warum verursacht die Verwendung eines unitialisierten Zeigers keinen Segmentierungsfehler?
- 2. Warum verursacht dieses C-Programm keinen Segmentierungsfehler mit alphanumerischen Werten?
- 3. Warum verursacht Komma (,) keinen Kompilierungsfehler?
- 4. Warum verursacht @NotNull keinen Kompilierzeitfehler?
- 5. Warum verursacht dieser Code einen Segmentierungsfehler?
- 6. Warum verursacht der Destruktor einen Segmentierungsfehler?
- 7. Was verursacht einen Segmentierungsfehler?
- 8. opencc python verursacht Segmentierungsfehler
- 9. Matrixkopieren verursacht Segmentierungsfehler
- 10. Was verursacht Segmentierungsfehler Fehler?
- 11. Warum verursacht diese Unterabfrage KEINEN Fehler?
- 12. Segmentierungsfehler. Warum?
- 13. Warum verursacht mein Django-Formular keinen Fehler?
- 14. Warum verursacht dieser Code keinen Speicherverlust?
- 15. Warum verursacht diese Ausnahme keinen Laufzeitfehler?
- 16. Deklaration der Variablen verursacht Segmentierungsfehler
- 17. Warum wird der Segmentierungsfehler durch die Reihenfolge der Klassenvariablen verursacht?
- 18. C-Programmierung, warum verursacht diese große Array-Deklaration einen Segmentierungsfehler?
- 19. Warum verursacht das Vergleichen von Typen in MYSQL keinen Fehler?
- 20. Array von Zeigern, warum Segmentierungsfehler?
- 21. Ruby, DB2/400, ibm_db verursacht "Segmentierungsfehler"
- 22. Nicht sicher, was meinen Segmentierungsfehler verursacht - C++
- 23. @TransactionAttribute (REQUIRED) verursacht keinen Effekt
- 24. PHP-Segmentierungsfehler durch php while-Schleife verursacht
- 25. Passing Mat zu OpenCL Kernel verursacht Segmentierungsfehler
- 26. Dynamische Größenanpassung einer Matrix verursacht Segmentierungsfehler
- 27. Dynamisches Array von int-Zeigern verursacht Segmentierungsfehler
- 28. Segmentierungsfehler C++ verursacht Absturz des Programms
- 29. Warum verursacht die Neudefinition der optionalen Bindung keinen Fehler?
- 30. Warum verursacht die MediaRecorder-Funktion keinen ANR-Fehler?
Out-of-Bound-Indexierung ist undefiniertes Verhalten. Suchen Sie nach einem nicht definierten Verhaltens- und Segmentierungsfehler. – P0W
UB bedeutet, dass alles möglich ist, es muss kein Segmentfehler verursacht werden. – songyuanyao
Angenommen, ich initiiere a [33] = 120 & drucke a [33], es druckt 120. Wo genau ist das ein [33] im Speicher? – Sparrow