Nun ist die wirkliche Frage, können wir nicht die dynamische Speicherzuweisung global vornehmen? Warum zeigt es einen Fehler, wenn ich malloc global benutze? Und der Code funktioniert ohne Fehler, wenn ich die malloc
Anweisung in die Hauptfunktion oder eine andere Funktion setze. Warum ist das so?
Sie können Code nicht außerhalb von Funktionen ausführen. Das einzige, was Sie auf globaler Ebene tun können, ist das Deklarieren von Variablen (und das Initialisieren dieser Variablen mit Kompilierzeitkonstanten).
malloc
ist ein Funktionsaufruf, der außerhalb einer Funktion ungültig ist.
Wenn Sie eine globale Zeigervariable mit malloc
von Ihrem main (oder einer anderen Funktion) initialisieren, steht sie allen anderen Funktionen zur Verfügung, in denen sich diese Variable befindet (in Ihrem Beispiel alle Funktionen innerhalb der Datei) enthält main
).
(Beachten Sie, dass globale Variablen möglichst vermieden werden sollten.)
Nun, es geht nicht darum, malloc global zu verwenden. Ihr malloc-Prozess muss sich in einer Funktion, einer Hauptfunktion oder einer anderen benutzerdefinierten Funktion befinden . Global können Sie die Variable nur delarieren. Da 'y' global deklariert ist, ist malloc ein Funktionsaufruf. das muss in jeder Funktion enthalten sein. Nicht nur malloc, Sie können keine Funktion aufrufen, wie Sie sie hier genannt haben. Sie können die Funktion nur als global oder lokal deklarieren .
Sie können einen Funktionsaufruf nicht verwenden, wenn Sie eine statische oder globale Variable initialisieren. Im Folgenden Codefolge deklarieren wir eine statische Variable und versuchen dann, sie mit zu initialisieren malloc:
static int *pi = malloc(sizeof(int));
Dadurch wird eine Fehlermeldung zur Kompilierungszeit generiert. Das Gleiche passiert mit global
Variablen können aber für statische Variablen vermieden werden, indem eine separate Anweisung zur Zuweisung verwendet wird
Speicher für die Variable wie folgt. Wir können keine separate Zuweisungsanweisung mit verwenden
Globale Variablen, weil globale Variablen außerhalb einer Funktion und ausführbaren Datei deklariert sind
Code wie die Zuweisungsanweisung muss innerhalb einer Funktion sein:
static int *pi;
pi = malloc(sizeof(int));
Vom Standpunkt des Compilers gibt es einen Unterschied zwischen der Verwendung des Initialisierungsoperator, =, und den Zuweisungsoperator verwenden, =.
Tags und Links c global-variables malloc dynamic-memory-allocation