malloc() unter Windows
-
Wo wir gleich schonmal beim Thema sind: in einem Buch, dass sich rein nur mit C beschäftigt, wird malloc / calloc auch "gecastet" benutzt. Dort wird so argumentiert, dass ohne cast der Speicherbereich mit "zufälligen Werten gefüllt sei" und er "gecastet" werden müsse, damit man ihn benutzten kann. Ist es nun standardkonform, dass man unter C den speicher nicht "casten" braucht oder ist das eine Frage des Compilers?
-
Berufspenner schrieb:
Wo wir gleich schonmal beim Thema sind: in einem Buch, dass sich rein nur mit C beschäftigt, wird malloc / calloc auch "gecastet" benutzt. Dort wird so argumentiert, dass ohne cast der Speicherbereich mit "zufälligen Werten gefüllt sei" und er "gecastet" werden müsse, damit man ihn benutzten kann. Ist es nun standardkonform, dass man unter C den speicher nicht "casten" braucht oder ist das eine Frage des Compilers?
Der Speicher wird dabei überhaupt nicht gecastet, sondern der Pointer, der zurückgegeben wurde. Unter der Voraussetzung, dass du das richtig wiedergegeben hast, steht in dem Buch absoluter Nonsens und man sollte sich davor hüten, irgendwas davon für bare Münze zu nehmen. Um was für ein Buch handelt es sich denn?
BTW malloc liefert immer uninitialisierten Speicher zurück. Willst du genullten Speicher, kannst du calloc benutzen.
-
Bashar schrieb:
Berufspenner schrieb:
Wo wir gleich schonmal beim Thema sind: in einem Buch, dass sich rein nur mit C beschäftigt, wird malloc / calloc auch "gecastet" benutzt. Dort wird so argumentiert, dass ohne cast der Speicherbereich mit "zufälligen Werten gefüllt sei" und er "gecastet" werden müsse, damit man ihn benutzten kann. Ist es nun standardkonform, dass man unter C den speicher nicht "casten" braucht oder ist das eine Frage des Compilers?
Der Speicher wird dabei überhaupt nicht gecastet, sondern der Pointer, der zurückgegeben wurde. Unter der Voraussetzung, dass du das richtig wiedergegeben hast, steht in dem Buch absoluter Nonsens und man sollte sich davor hüten, irgendwas davon für bare Münze zu nehmen. Um was für ein Buch handelt es sich denn?
BTW malloc liefert immer uninitialisierten Speicher zurück. Willst du genullten Speicher, kannst du calloc benutzen.
Mein Fehler, meine natürlich, dass der Pointer gecastet wird und nicht der Speicher
Naja, selbst in "C - kurz & gut" von Prinz und Prinz wird der Pointer gecastet.
-
kurz&gut... lol
-
Berufspenner schrieb:
Wo wir gleich schonmal beim Thema sind: in einem Buch, dass sich rein nur mit C beschäftigt, wird malloc / calloc auch "gecastet" benutzt. Dort wird so argumentiert, dass ohne cast der Speicherbereich mit "zufälligen Werten gefüllt sei" und er "gecastet" werden müsse, damit man ihn benutzten kann. Ist es nun standardkonform, dass man unter C den speicher nicht "casten" braucht oder ist das eine Frage des Compilers?
1. Das widerspricht zumindest allem, was ich bislang zu dem Thema gelesen habe.
2. Wieso sollte es schlimm sein, wenn der allozierte Speicher mit zufälligen Werten gefüllt ist? Man will ihn doch schließlich selbst füllen, da ist es doch irrelevant, was vorher darin stand. Wer den Speicher nullen muss, kann das mit memset tun, fetig.
-
malloc() reserviert den Speicher
calloc() reserviert den Speicher und initialisiert ihn mit $00
-
_matze schrieb:
1. Das widerspricht zumindest allem, was ich bislang zu dem Thema gelesen habe.
Was hast du denn sonst zu dem Thema gelesen, das dieses Aussage jetzt so widersprüchlich ist?
_matze schrieb:
2. Wieso sollte es schlimm sein, wenn der allozierte Speicher mit zufälligen Werten gefüllt ist? Man will ihn doch schließlich selbst füllen, da ist es doch irrelevant, was vorher darin stand. Wer den Speicher nullen muss, kann das mit memset tun, fetig.
Naja, es wird ja wie gesagt nicht der Speicher sondern der Pointer gecastet. Und wenn ich den Speicher "vorfüllen" will, dann lasse ich das gleich beim allozieren mit calloc machen.
-
Irgendwie fehlt jetzt immer noch die Begründung für das Casten des Zeigers aus dem Buch, nachdem es das mit dem uninitialisierten Speicher ja nicht war ...
-
Bashar schrieb:
Irgendwie fehlt jetzt immer noch die Begründung für das Casten des Zeigers aus dem Buch, nachdem es das mit dem uninitialisierten Speicher ja nicht war ...
Naja, ich vermute mal, dass man sich unter den Autoren darauf einstellen wollte, dass der Leser die Programme nich nur mit einem reinen C-Compiler übersetzt bekommt, sondern auch mit einem C++-Compiler, der ja bekanntlich Warnings raushaut, wenn man hier auf das Casten verzichtet. Das Buch heißt im übrigen "Programmieren in C - eine mathematikorientierte Einführung" und gefällt mir sonst eigentlich recht gut, auch wenn es an dieser Stelle zeigt, dass es vielleicht mit der Argumentation etwas schwammig ist
-
Ist ja auch alles halb so schlimm. Man sollte nur seinen Code nicht in Foren posten in denen alle nur wie die Bluthunde darauf warten, dass jemand main falsch deklariert o.ä. :p
-
Bashar schrieb:
Ist ja auch alles halb so schlimm. Man sollte nur seinen Code nicht in Foren posten in denen alle nur wie die Bluthunde darauf warten, dass jemand main falsch deklariert o.ä. :p
So lustig das auch klingen mag, aber leider hast du damit als zu sehr Recht
Bluthunde trifft es da recht gut