Heim >Computer-Tutorials >Computerwissen >malloc-Funktion für die dynamische Speicherzuweisung in C-Sprache

malloc-Funktion für die dynamische Speicherzuweisung in C-Sprache

WBOY
WBOYnach vorne
2024-01-17 09:09:06902Durchsuche

malloc-Funktion für die dynamische Speicherzuweisung in C-Sprache

Die Malloc-Funktion 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.

Das Problem mit der malloc-Funktion in der C-Sprache: Ich habe malloc in der folgenden Funktion zweimal verwendet, um p insgesamt 6 Speichereinheiten zu geben

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

Sie können sich den Prototyp der Malloc-Funktion ansehen

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:docexcel.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen