Wird der Speicher den dieser CString belegt, während der Laufzeit des Programms wieder freigegeben?
-
#include <stdio.h> #include <string.h> int main(){ char s[] = "Hallo, dies soll ein super langer Sring darstellen, wir stellen uns vor, er wäre 10^9 Zeichen lang.\n"; int c; int nachher, vorher = strlen(s); s[5] = 0; /* Hier kürzen wir den CString brachial ab, in dem wir ihm einfach an Stelle a[5] das Nullzeichen geben. aber steht der Speicherplatz, der auf s[4] folgt nun dem System wieder zur Benutzung zur Verfügung oder bleibt er reserviert? */ nachher = strlen(s); printf("Länge des Strings: \nVorher = %i\nNachher = %i\n", vorher, nachher); printf("\nDer String lautet nun:\n%s\n", s); printf("\n\nZum Beenden des Programs, Taste drücken!\n"); while ( (c = getchar ()) == ' ') { } return 0; }
Nach Abarbeitung des Befehls in Zeile 8 ist der String kleiner, aber steht der Speicher dahinter nun dem System wieder zur Verfügung?
Könnte man den Speicherplatz dahinter also durch andere Programme nutzen?
-
Im Kommentarbereich des Codes hat sich ein kleiner Fehler eingeschlichen.
Es sollte dort heißen:
"der auf s[5] folgt"
-
Nein, das geht nicht. Nullterminierung ist bloß eine Konvention, die von diversen Funktionen zur Zeichenkettenverarbeitung benutzt wird*. Das ist auf Ebene der Programmlogik. Es ändert nicht die Regeln der Sprache. Die Regel der Sprache C ist aber, dass Arrays eine konstante Größe haben.
Wenn du willst, kannst du natürlich irgendwas anderes hinter der 0 speichern. Funktionen zur Zeichenkettenverarbeitung werden, wie gesagt, bei der ersten 0, die sie finden, anhalten und nichts von dem mitbekommen, was eventuell noch dahinter steht. Aber das ist alles nur von dir programmierte Programmlogik, du kannst halt deine Variablen nutzen wie du möchtest.
Könnte man den Speicherplatz dahinter also durch andere Programme nutzen?
Das geht sowieso überhaupt gar nicht. Speicherverwaltung funktioniert so nicht. Jedes Programm hat seinen eigenen, abgeschotteten Speicher, außer vielleicht auf den allerprimitivsten Systemen. Und das sind Systeme, auf denen keine zwei Programme gleichzeitig laufen.
*: Das sind, unter anderem, so ziemlich alle Funktionen der Standardbibliothek, die mit "str" beginnen.
-
Danke für deine Antwort.