Heim >Computer-Tutorials >Computerwissen >malloc-Funktion für die dynamische Speicherzuweisung in C-Sprache
Header-Dateien müssen eingefügt werden:
#ich schließe ein
oder
#ich schließe ein
Funktionsdeklaration (Funktionsprototyp):
void *malloc(int size);
Die malloc-Funktion wird verwendet, um beim System einen Speicherplatz einer bestimmten Größe zuzuweisen, und der Rückgabetyp ist void*. In C und C++ kann ein Zeiger vom Typ void* in einen Zeiger eines beliebigen anderen Typs umgewandelt werden.
Wie aus der Funktionsdeklaration hervorgeht, gibt es mindestens zwei Unterschiede zwischen malloc und new: new gibt einen Zeiger des angegebenen Typs zurück und kann die erforderliche Größe automatisch berechnen. Zum Beispiel:
int *p;
p = new int; // Der Rückgabetyp ist der Typ int* (Ganzzahlzeiger) und die Zuordnungsgröße ist sizeof(int);
oder:
int* parr;
parr = new int [100]; // Der Rückgabetyp ist int*-Typ (Ganzzahlzeiger) und die Zuordnungsgröße ist sizeof(int) * 100;
Mit malloc müssen wir die Anzahl der benötigten Bytes berechnen und nach der Rückgabe die Konvertierung in einen Zeiger des tatsächlichen Typs erzwingen.
int* p;
p = (int *) malloc (sizeof(int));
Zunächst gibt die malloc-Funktion den Typ void * zurück. Wenn Sie Folgendes schreiben: p = malloc (sizeof(int)); Typvariable.“ Sie müssen also (int *) zum Casting übergeben.
Zweitens ist der eigentliche Parameter der Funktion sizeof(int), der verwendet wird, um die erforderliche Größe ganzzahliger Daten anzugeben. Wenn du schreibst:
int* p = (int *) malloc (1);
Der Code kann auch kompiliert werden, aber tatsächlich wird nur 1 Byte Speicherplatz zugewiesen. Wenn Sie eine Ganzzahl darin speichern, werden 3 Bytes obdachlos und direkt „im Haus des Nachbarn leben“! Das Ergebnis ist, dass der gesamte ursprüngliche Dateninhalt im Folgespeicher gelöscht wird.
malloc kann auch den Effekt von new [] erzielen und einen kontinuierlichen Speicher beantragen. Die Methode besteht lediglich aus der Angabe der benötigten Speichergröße.
Wenn Sie beispielsweise 100 int-Typ-Leerzeichen zuweisen möchten:
int* p = (int *) malloc ( sizeof(int) * 100 ); //Speicherplatz zuweisen, der 100 ganze Zahlen aufnehmen kann.
Ein weiterer Unterschied, der nicht direkt erkennbar ist, besteht darin, dass malloc nur Speicher zuweist und den erhaltenen Speicher nicht initialisieren kann, sodass der Wert des neuen erhaltenen Speichers zufällig ist.
Mit Ausnahme der unterschiedlichen Zuordnungs- und endgültigen Freigabemethoden wird der Zeiger über malloc oder new abgerufen, und andere Vorgänge sind konsistent.
Alles erweitern
Sie haben beim ersten Mal 3 Ints zugewiesen. Leider haben Sie den ersten drei Ints keinen Wert zugewiesen Ich bin direkt ins Aus gegangen und habe 3 Int-Einheiten außerhalb der Grenzen geschrieben. Es ist ein Glück, dass das Programm nicht sofort abgestürzt ist
int *p, *p1,i;p = (int *)malloc(3*sizeof(int));
for(i=0;i printf("n int put:");
scanf("%d",p+i);
}
p1 = (int *)malloc(3*sizeof(int));
for(i=0; i printf("n int put:");
scanf("%d",p1+i);
}
for(i=0;i for(i=0;i Super einfaches Malloc-Funktionsproblem
void* malloc(int)
Der Parameter von malloc ist eine Ganzzahl, die die Menge des anzuwendenden Speichers in Bytes darstellt. Der Rückgabewert ist ein Zeiger auf diesen Speicher, der ein Zeiger vom Typ Null ist.
Und sizeof ist ein Operator, mit dem Sie die Anzahl der Bytes im Speicher ermitteln können, die von einem Typ oder einer Variablen belegt werden. Das Ergebnis ist eine Ganzzahl. Also berechnet pp=(float *)malloc(sizeof(float)); tatsächlich zuerst die Anzahl der von einem Float-Typ belegten Bytes. In einer 32-Bit-Umgebung sollten es 4 Bytes sein Das Ergebnis ist 4. Dann gilt malloc(4) für einen 4-Byte-Speicherplatz, gibt die Adresse dieses Speicherbereichs zurück und erzwingt dann die Konvertierung in den Typ float*.
Bei verknüpften Listen speichert jedes verknüpfte Listenelement die Adresse des nächsten oder vorherigen Elements. Natürlich belegt jedes verknüpfte Listenelement Speicherplatz. Wenn Sie ein neues verknüpftes Listenelement hinzufügen möchten, müssen Sie diesem Element zunächst eine Adresse zuweisen. Andernfalls können die Daten nicht gespeichert werden.
Das obige ist der detaillierte Inhalt vonmalloc-Funktion für die dynamische Speicherzuweisung in C-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!