22. November 200816 j Danke Klotzkopp, Fehler erkannt. Ich mußte erstmal in der Hilfe nach "Literalen" suchen, mir war der Begriff nicht geläufig. Ich hatte ihn mit Ressource gleichgesetzt.
22. November 200816 j Folgende Operationen sind verboten, weil sie undefiniertes Verhalten erzeugen: Jegliche Zugriffe über uninitialisierte ZeigerJegliche Zugriffe über NullzeigerSchreibzugriffe auf StringliteraleJegliche Zugriffe über den alloziierten Speicherbereich hinaus (Buffer Overflow) und da str4= 0 ist, ist das dann verboten
26. November 200816 j Ich habe das mal praktisch durchgeführt. Zeilen 06 und 07 funktionieren. Ich frage mich hier allerdings warum Zeile 06 funktioniert. Zeile 08 und 09 funktionieren nicht. Bei Zeile 08 ist das klar. Bei Zeile 09 bin ich mir nicht sicher. Liegt es daran, dass str4 einfach völlig undefiniert ist bzw.str4 kein Speicher zur Verfügung gestellt wird? lg
26. November 200816 j Ich habe das mal praktisch durchgeführt. Zeilen 06 und 07 funktionieren. Ich frage mich hier allerdings warum Zeile 06 funktioniert. Diese Herangehensweise funktioniert bei C und C++ nicht. Laut Standard erzeugt der Code in Zeile 6 undefiniertes Verhalten. Das heißt nicht, dass das Programm an dieser Stelle abstürzen muss (das wäre ein definiertes Verhalten), sondern dass irgendetwas passieren kann. Man darf bei C und C++ daraus, dass ein Code funktioniert, nicht schlussfolgern, dass er richtig ist. Liegt es daran, dass str4 einfach völlig undefiniert ist bzw.str4 kein Speicher zur Verfügung gestellt wird?str4 ist ein Nullzeiger. Nullzeiger dürfen nicht dereferenziert werden, sonst -> undefiniertes Verhalten. Konkret erzeugt das bei allen mir bekannten Compilern auf Betriebssystemen, die virtuellen Speicher anbieten, eine Schutzverletzung.
26. November 200816 j Danke, setze mich erst seit kurzem wieder mit c auseinander. Daher für alle die sich wie ich fragen was so ein Nullzeiger ist: Galileo Computing :: C von A bis Z – 16.3 Die Mysterie von NULL lg
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.