Dynamische Allokation von Structs
Überblick über die dynamische Speicherzuweisung in der Programmiersprache C.
Zur Zuweisung von Speicher auf dem Heap wird die Funktion malloc() aus der Bibliothek stdlib.h verwendet:
<pointer> = (data_type*)malloc(n * sizeof(data_type));
Dynamisch zugewiesener Speicher bleibt reserviert, bis er explizit mit free() wieder freigegeben wird.
main.c
12345678910111213141516171819#include <stdio.h> #include <stdlib.h> // structure definition struct Example { int someValue[20]; // int = 4 bytes, 20 * 4 = 80 bytes }; int main() { // allocating memory for Example structure struct Example* pExample = (struct Example*)malloc(sizeof(struct Example)); printf("Allocating memory = %zu bytes\n", sizeof(*pExample)); // freeing memory free(pExample); return 0; }
Wenn eine Struktur mehrere Felder mit unterschiedlichen Datentypen enthält, wird der Compiler die Größe der Felder anpassen, sodass die Struktur "bequem" im Speicher abgelegt werden kann.
Nach Abschluss der Aufgabe sollte darauf geachtet werden, wie viele Bytes für die Struktur mit den Feldern int und char reserviert werden. Dieses Phänomen wird später in diesem Kurs noch behandelt.
Swipe to start coding
Sie sollen eine Student-Struktur erstellen und dynamisch Speicher dafür mit der Funktion malloc() reservieren.
Ihre Aufgabe ist es, die Struktur mit Beispielwerten zu initialisieren und einen Zeiger darauf zurückzugeben.
Innerhalb der Funktion createStudent:
- Verwenden Sie
malloc(), um Speicher für eine Student-Struktur zu reservieren. - Überprüfen Sie, ob die Speicherreservierung erfolgreich war (falls nicht, geben Sie
NULLzurück). - Weisen Sie einen Standardnamen mit
sprintf()zu — zum Beispiel"Alice Johnson". - Weisen Sie einen Wert für
agezu, beispielsweise21. - Weisen Sie einen Wert für
gpazu, beispielsweise3.85. - Geben Sie den Zeiger auf die reservierte Struktur zurück.
In der Funktion main:
- Verwenden Sie die Funktion
free(), um den reservierten Speicher nach der Nutzung freizugeben.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain why the compiler equalizes the size of structure fields?
How do I check the size of a structure in C?
What happens if I forget to free dynamically allocated memory?
Großartig!
Completion Rate verbessert auf 4.35
Dynamische Allokation von Structs
Swipe um das Menü anzuzeigen
Überblick über die dynamische Speicherzuweisung in der Programmiersprache C.
Zur Zuweisung von Speicher auf dem Heap wird die Funktion malloc() aus der Bibliothek stdlib.h verwendet:
<pointer> = (data_type*)malloc(n * sizeof(data_type));
Dynamisch zugewiesener Speicher bleibt reserviert, bis er explizit mit free() wieder freigegeben wird.
main.c
12345678910111213141516171819#include <stdio.h> #include <stdlib.h> // structure definition struct Example { int someValue[20]; // int = 4 bytes, 20 * 4 = 80 bytes }; int main() { // allocating memory for Example structure struct Example* pExample = (struct Example*)malloc(sizeof(struct Example)); printf("Allocating memory = %zu bytes\n", sizeof(*pExample)); // freeing memory free(pExample); return 0; }
Wenn eine Struktur mehrere Felder mit unterschiedlichen Datentypen enthält, wird der Compiler die Größe der Felder anpassen, sodass die Struktur "bequem" im Speicher abgelegt werden kann.
Nach Abschluss der Aufgabe sollte darauf geachtet werden, wie viele Bytes für die Struktur mit den Feldern int und char reserviert werden. Dieses Phänomen wird später in diesem Kurs noch behandelt.
Swipe to start coding
Sie sollen eine Student-Struktur erstellen und dynamisch Speicher dafür mit der Funktion malloc() reservieren.
Ihre Aufgabe ist es, die Struktur mit Beispielwerten zu initialisieren und einen Zeiger darauf zurückzugeben.
Innerhalb der Funktion createStudent:
- Verwenden Sie
malloc(), um Speicher für eine Student-Struktur zu reservieren. - Überprüfen Sie, ob die Speicherreservierung erfolgreich war (falls nicht, geben Sie
NULLzurück). - Weisen Sie einen Standardnamen mit
sprintf()zu — zum Beispiel"Alice Johnson". - Weisen Sie einen Wert für
agezu, beispielsweise21. - Weisen Sie einen Wert für
gpazu, beispielsweise3.85. - Geben Sie den Zeiger auf die reservierte Struktur zurück.
In der Funktion main:
- Verwenden Sie die Funktion
free(), um den reservierten Speicher nach der Nutzung freizugeben.
Lösung
Danke für Ihr Feedback!
single