Malloc-Funktion (dynamische Speicherzuweisung), die bei globaler Verwendung zu einem Fehler führt

8
%Vor% %Vor%

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?

%Vor%     
niko 19.07.2011, 05:52
quelle

3 Antworten

19

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.)

    
Mat 19.07.2011, 05:54
quelle
1

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 .

    
Durgesh 19.07.2011 08:11
quelle
0

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, =.

    
Ayush Srivastava 11.06.2014 17:01
quelle