Typverletzung

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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>

int main()
{
    char *TEXT = "Hello World";
    TEXT = 7;                    // implizite Typumwandlung
    printf("%s", TEXT);          // Zugriff auf Speicherposition 0x07 ungültig (segmentation fault)
    return 0;
}