- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel) - Kurswechsler Dropdown mit Direktnavigation - Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage - Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets - Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor - Saubere Bereinigung redundanter statischer Legacy-Sidebars |
||
|---|---|---|
| .. | ||
| aufgabe.c | ||
| index.html | ||
| musterloesung.c | ||
| README.md | ||
| test_aufgabe.cpp | ||
C 03: Strings, Stack vs. Heap & Manuelle Speicherallokation 🧱
Willkommen zu Modul 03 des C & C++ Systems Engineering Lehrpfads!
In diesem Modul lernst du die Verwaltung des Arbeitsspeichers auf Hardware-Ebene kennen: Null-terminierte Zeichenketten (char[]), die strikte Trennung von Stack und Heap sowie die C-Speicherfunktionen malloc, calloc, realloc und free.
💡 1. Das Wichtigste in Kürze
C-Strings & das Null-Byte ('\0')
In C sind Strings Arrays von Zeichen (char), die durch das Byte 0 ('\0') abgeschlossen werden.
- Die Länge eines Strings ist die Anzahl der Zeichen vor dem
'\0'. - Ein Puffer für einen String der Länge
Nmuss mindestensN + 1Bytes groß sein!
Stack vs. Heap
- Stack (Stapelspeicher): Sehr schneller Speicher für lokale Variablen und Funktionsaufruf-Frames. Automatisch freigegeben, sobald der Block
{}verlassen wird. Begrenzte Größe. - Heap (Dynamischer Freispeicher): Großer Speicherbereich für Daten mit dynamischer oder langlebiger Existenz. Muss vom Programmierer manuell reserviert und freigegeben werden.
Allokation & Freigabe
#include <stdlib.h>
#include <string.h>
// 1. Allokation
int* data = (int*)malloc(5 * sizeof(int));
if (data == NULL) { /* Out of Memory Fehlerbehandlung */ }
// 2. Verwendung
for (size_t i = 0; i < 5; i++) {
data[i] = (int)(i * 10);
}
// 3. Vergrößerung
int* expanded = (int*)realloc(data, 10 * sizeof(int));
if (expanded != NULL) {
data = expanded;
}
// 4. Sichere Freigabe
free(data);
data = NULL; // Verhindert Dangling-Pointer-Fehler
🎯 Aufgaben in aufgabe.c
- TODO 1 (
c_string_laenge): Zähle die Zeichen einesconst char*bis zum Null-Terminator'\0'. - TODO 2 (
c_string_umkehren): Kehre einen C-String in-place um (z. B."hello"->"olleh"). - TODO 3 (
erstelle_dynamisches_array): Allokiere mitmalloceinint-Array der Größeanzahlauf dem Heap und fülle es mitinitial_wert. - TODO 4 (
dupliziere_string): Allokierestrlen(src) + 1Bytes auf dem Heap und kopiere den String zeichenweise oder mitmemcpy/strcpy. - TODO 5 (
vergroessere_array): Erweitere ein bestehendes dynamisches Array mitreallocund initialisiere die neuen Elemente mitfuell_wert. - TODO 6 (
gebe_speicher_frei): Gib den Speicher über einen Zeiger-auf-Zeiger (void** ptr_ref) frei und setze*ptr_ref = NULL.
🧪 Tests ausführen
Die Tests prüfen String-Algorithmen, dynamische Allokationen sowie die Vermeidung von Memory Leaks.