Typverletzung

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 19. Dezember 2023 um 16:40 Uhr durch Serols (Diskussion | Beiträge) (Änderungen von 2003:D1:2F25:C401:918B:DFBB:987:4199 (Diskussion) rückgängig gemacht (HG) (3.4.12)).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Eine gesichtete Version dieser Seite, die am 19. Dezember 2023 freigegeben wurde, basiert auf dieser Version.

Eine Typverletzung (engl. type conflict) liegt bei der Programmierung vor, wenn Datentypen nicht regelgemäß verwendet werden.

In der Regel wird bei einer Variablen der Datentyp festgelegt, womit ihr Wertebereich, also die Menge der zulässigen Belegungen der Variablen mit einem konkreten Wert, eingeschränkt wird. Weist man dann zum Beispiel einer Variablen, die eine Zeichenkette aufnehmen soll, eine ganze Zahl zu, so liegt eine Typverletzung vor. Es gibt Programmiersprachen, die hier implizit eine Typkonvertierung vornehmen würden, wie etwa PHP oder Python (siehe auch schwache Typisierung) und somit in der Folge kein Laufzeitfehler auftreten würde. Dies verringert zwar den Aufwand bei der Programmierung, erschwert allerdings (wenn die Konvertierung ungewollt ist) auch die Entdeckung von Fehlern.

Ein Linter ist in der Lage fehlerhafte Zuweisungen zu bemerken und den Programmierer zu warnen.

Das folgende Beispiel zeigt in der Programmiersprache C, wie durch eine Zuweisung eines Zahlenwertes eine Typverletzung entsteht. Moderne Compiler erkennen die Zuweisung und führen die implizite Typumwandlung (auch cast genannt) durch und geben im Idealfall eine Warnung an den Nutzer aus. Führt der Compiler die implizite Typumwandlung durch, bewirkt dies einen Fehler in der nachfolgenden Zeile. Wird die Typumwandlung nicht durchgeführt, erzeugt die Zuweisung einen Fehler.

#include<stdio.h>
intmain()
{
char*TEXT="Hello World";
TEXT=7;// implizite Typumwandlung
printf("%s",TEXT);// Zugriff auf Speicherposition 0x07 ungültig (segmentation fault)
return0;
}
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Typverletzung&oldid=240331174"