+2 votes
Hey Leute,

hätte eine Frage zu C. Und zwar versuche ich mich grade an der C aufgabe (10) der Altklausur WS16/17 und hab jetzt des öfteren gesehn, dass nach dem erstellen eines Listenelements mit malloc()in der nächsten Zeile eine if abfrage kommt welche bei erfolgreicher Abfrage auf Listenelement == NULL exit (1) ausführt.

kann mir jemand kurz erklären was es damit auf sich hat ?

falls ich das Listenelement erstelle ist es doch zu anfang immer NULL oder nicht ?

was passiert wenn exit(1); ausgeführt wird ?

Vielen Dank im vorraus
in * TF "Softw.-Eng." by (140 points)

1 Answer

0 votes

Die Funktion "malloc" gibt im Fehlerfall "NULL" zurück, beispielsweise wenn momentan nicht so viel freier Speicher vorhanden ist wie angefordert. Wenn man ein robustes C Programm schreiben will, muss man diesen Fall eigentlich immer behandeln und sich überlegen, wie das Programm weiterarbeiten soll, wenn nicht mehr genug Speicher vorhanden ist. Da es in C keine Exceptions gibt, ist das aber relativ aufwendig zu programmieren. Daher haben wir uns in der Vorlesung und der Übung die Sache etwas vereinfacht behandelt und einfach mit "printf" eine Fehlermeldung ausgegeben und mit "exit" das Programm beendet. Der Parameter "1" beim Aufruf von "exit" ist der Rückgabewert des Programms. Ein Wert ungleich 0 signalisiert dem Aufrufer des Programms, dass dieses nicht erfolgreich ausgeführt wurde.

Bei C-Programmen, die etwas länger laufen sollen (grafische Anwendungen, Server, Betriebssystem-komponenten, etc.) ist es natürlich nicht sinnvoll einfach das Programm zu beenden. Dann muss man sich überlegen, was für die Anwendung Sinn macht. Oft ist es sinnvoll den Fehler in einer Funktion erst einmal an den Aufrufer weiterzugeben.

Wenn in der Klausuraufgabe aber nicht explizit gefordert ist, was im Fehlerfall passieren soll, muss der Rückgabewert von "malloc" dort auch nicht geprüft werden.

falls ich das Listenelement erstelle ist es doch zu anfang immer NULL oder nicht ?

Der Rückgabewert von "malloc" ist ein Pointer, der nur im Fehlerfall NULL ist. Der Inhalt des Speicherbereichs ist jedoch erstmal nicht initalisiert (was nochmal etwas anderes als NULL ist). Bei "malloc" darf erst nach der Initialisierung des Speicherbereichs daraus gelesen werden. Die Variante "calloc" garantiert, dass im neuen Speicherbereich nur Nullen stehen.

by (930 points)

Related questions

0 votes
1 answer
asked Sep 17, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
+1 vote
2 answers
asked Sep 13, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
0 votes
1 answer
asked Sep 16, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
+1 vote
1 answer
asked Sep 12, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
0 votes
1 answer
Imprint | Privacy Policy
...