Dynamisk Allokering af Structs
Lad os gennemgå, hvordan man dynamisk allokerer hukommelse i C-sproget.
For at allokere hukommelse på heapen anvendes malloc()-funktionen fra stdlib.h-biblioteket:
<pointer> = (data_type*)malloc(n * sizeof(data_type));
Når du dynamisk allokerer hukommelse til brug i dit program, forbliver denne hukommelse reserveret, indtil du eksplicit frigiver den med free().
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; }
Hvis en struktur indeholder flere felter af forskellige datatyper, vil compileren udligne størrelsen på felterne, så strukturen bliver "praktisk" lagret i hukommelsen.
Efter det udførte arbejde, læg mærke til hvor mange bytes der allokeres til strukturen med felterne int og char. Dette fænomen vil blive diskuteret senere i dette kursus.
Swipe to start coding
Du skal oprette en Student-struktur og dynamisk allokere hukommelse til den ved hjælp af funktionen malloc().
Din opgave er at initialisere strukturen med eksempelværdier og returnere en pointer til den.
Inde i funktionen createStudent:
- Brug
malloc()til at allokere hukommelse til én Student-struktur. - Kontroller om allokeringen var vellykket (hvis ikke, returnér
NULL). - Tildel et standardnavn ved hjælp af
sprintf()— for eksempel"Alice Johnson". - Tildel en værdi til
age, såsom21. - Tildel en værdi til
gpa, såsom3.85. - Returnér pointeren til den allokerede struktur.
I funktionen main:
- Brug funktionen
free()til at frigive den allokerede hukommelse efter brug.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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?
Fantastisk!
Completion rate forbedret til 4.35
Dynamisk Allokering af Structs
Stryg for at vise menuen
Lad os gennemgå, hvordan man dynamisk allokerer hukommelse i C-sproget.
For at allokere hukommelse på heapen anvendes malloc()-funktionen fra stdlib.h-biblioteket:
<pointer> = (data_type*)malloc(n * sizeof(data_type));
Når du dynamisk allokerer hukommelse til brug i dit program, forbliver denne hukommelse reserveret, indtil du eksplicit frigiver den med free().
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; }
Hvis en struktur indeholder flere felter af forskellige datatyper, vil compileren udligne størrelsen på felterne, så strukturen bliver "praktisk" lagret i hukommelsen.
Efter det udførte arbejde, læg mærke til hvor mange bytes der allokeres til strukturen med felterne int og char. Dette fænomen vil blive diskuteret senere i dette kursus.
Swipe to start coding
Du skal oprette en Student-struktur og dynamisk allokere hukommelse til den ved hjælp af funktionen malloc().
Din opgave er at initialisere strukturen med eksempelværdier og returnere en pointer til den.
Inde i funktionen createStudent:
- Brug
malloc()til at allokere hukommelse til én Student-struktur. - Kontroller om allokeringen var vellykket (hvis ikke, returnér
NULL). - Tildel et standardnavn ved hjælp af
sprintf()— for eksempel"Alice Johnson". - Tildel en værdi til
age, såsom21. - Tildel en værdi til
gpa, såsom3.85. - Returnér pointeren til den allokerede struktur.
I funktionen main:
- Brug funktionen
free()til at frigive den allokerede hukommelse efter brug.
Løsning
Tak for dine kommentarer!
single