Kadaj Geschrieben 11. Dezember 2011 Teilen Geschrieben 11. Dezember 2011 Hallo, ich möchte malloc in einem Programm verwenden, aber ich versteh nicht ganz wie ich es anwenden soll. In der man-page steht: void *malloc(size_t size); heißt das ich muss malloc als Funktion verwenden? Als Beispiel habe ich zum Beispiel das hier gefunden: #include <stdlib.h> #include <stdio.h> int *zeiger; zeiger=malloc(sizeof(*zeiger) * 10); // Speicher anfordern if (zeiger == NULL) { perror("Nicht genug Speicher vorhanden."); // Fehler ausgeben exit(EXIT_FAILURE); // Programm mit Fehlercode abbrechen }[/PHP] Was passiert denn hier? Ich lege einen Zeiger vom Typ int an und die Variable Zeiger wird mit der Größe des Zeigers * 10 belegt? Vor allem die if-Abfrage ist komisch, wann ist Zeiger denn NULL? Was hat das mit dem angeforderten Speicher zu tun? Kann mir das jemand erklären? Vielleicht anhand eines überschaubareren Beispiels? Vielen Dank! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 11. Dezember 2011 Teilen Geschrieben 11. Dezember 2011 siehe malloc - C++ Reference bzw sizeof - Wikipedia, the free encyclopedia Ich will es mal salopp formulieren: sizeof ist zur Compilezeit bekannt, denn sizeof liefert die Größe des Types (Typen sind immer zur Compilezeit bekannt). In Deinem Fall ist der Typ int*, somit kann malloc auch den Speicher allokieren, wobei (siehe Doku) gilt: If the function failed to allocate the requested block of memory, a null pointer is returned. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 11. Dezember 2011 Teilen Geschrieben 11. Dezember 2011 Ich lege einen Zeiger vom Typ int an und die Variable Zeiger wird mit der Größe des Zeigers * 10 belegt? Vor allem die if-Abfrage ist komisch, wann ist Zeiger denn NULL? Was hat das mit dem angeforderten Speicher zu tun? Du solltest genauer analysieren was passiert: heißt das ich muss malloc als Funktion verwenden? Ja. zeiger=malloc(sizeof(*zeiger) * 10); ist im Grunde das gleiche wie zeiger=malloc(Parameter); was dann soviel bedeutet wie: die Funktion malloc wird mit einem Parameter aufgerufen; und da es sich um eine Funktion und nicht um eine Prozedur handelt, gibt es einen Rückgabewert, welcher dann zeiger zugewiesen wird. Da zeiger eine Pointervariable ist, erhält sie einen Verweis auf -im Grunde naheliegend- den Anfang des reservierten Speicherbereichs, resp. NULL, wenn es keinen reservierten Speicherbereich zum drauf zeigen gibt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 12. Dezember 2011 Autor Teilen Geschrieben 12. Dezember 2011 ja, nun kommt langsam licht in`s dunkel, vielen dank euch beiden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.