Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die dynamische Speicherzuweisung in der C-Sprache

So implementieren Sie die dynamische Speicherzuweisung in der C-Sprache

angryTom
angryTomOriginal
2020-02-20 11:43:004926Durchsuche

So implementieren Sie die dynamische Speicherzuweisung in der C-Sprache

So implementieren Sie die dynamische Speicherzuweisung in der C-Sprache

Wir öffnen häufig im Voraus Speicherplatz für das Programm und führen es dann aus.

int arr[5] ;

Für dieses Array müssen wir beim Definieren im Voraus Speicherplatz freigeben. Während der Ausführung des Programms ist dieser zugewiesene Speicherplatz immer vorhanden, es sei denn, die Funktion wird ausgeführt. Speicherplatz wird freigegeben . Ein Problem besteht darin, dass dieses Array im Programm nicht geändert werden kann.

Diese Probleme haben uns einige Unannehmlichkeiten bei der Verwendung bereitet, daher wird die Funktion malloc() in C bereitgestellt.

In Bezug auf die malloc()-Funktion akzeptiert diese Funktion einen Parameter: die Anzahl der erforderlichen Speicherbytes. Dann findet malloc() einen Block geeigneter Größe im verfügbaren Speicher. In diesem Prozess kann malloc() die Adresse des ersten Bytes dieses Speichers zurückgeben. Das bedeutet also, dass wir Zeiger zum Betrieb verwenden können. malloc() kann verwendet werden, um Array-Zeiger, Strukturzeiger usw. zurückzugeben. Daher müssen wir den Typ des Rückgabewerts dem entsprechenden Typ zuweisen. Wenn malloc() den erforderlichen Speicherplatz nicht finden kann, gibt es einen Nullzeiger zurück.

Beispiel:

Empfohlenes Lernen: C-Sprachvideo-Tutorial

double *p;
p=(double*)malloc(30*sizeof(double));

In diesem Programm werden zuerst 30 Leerzeichen mit Doppelschrift geöffnet und dann Punkt p zur Position in diesem Raum. Der Zeiger zeigt hier auf den ersten Double-Wert. Nicht alle der 30 Doppelplätze, die wir eröffnet haben. Dies ist wie bei einem Array. Der Zeiger auf das Array zeigt auf die Adresse des ersten Elements des Arrays, nicht auf die Elemente des gesamten Arrays. Daher sind unsere Operationen hier die gleichen wie für Arrays

p[0] ist das erste Element und p[1] ist das zweite Element.

An diesem Punkt können wir eine Methode zum Deklarieren eines dynamischen Arrays beherrschen.

int arr[n];
p=(int *)malloc(n*sizeof(int));
//我们在这里使用的时候要元素个数乘类型字节长度,这样就达到了动态开辟内存空间。

Nachdem wir malloc() zum Öffnen des Speicherplatzes verwendet haben, müssen wir nur noch daran denken, den Speicherplatz freizugeben. Hier stellt uns C die Funktion free() zur Verfügung. Der Parameter von free() ist die von der Funktion malloc() zurückgegebene Adresse, die den von der vorherigen Funktion malloc() geöffneten Speicherplatz freigibt.

Beispiel:

Um den Platz freizugeben, den wir oben geöffnet haben, können wir Folgendes tun

free(p);

Das Programm ruft auch die Funktion „exit()“ auf, die sich im Speicher befindet Programm, wenn die Zuordnung fehlschlägt.

Programmbeispiel:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>//malloc()函数被包含在malloc.h里面
#include<stdlib.h>
int main(void)
{
    char*a = NULL;//声明一个指向a的char*类型的指针
    a = (char*)malloc(100 * sizeof(char));//使用malloc分配内存的首地址,然后赋值给a
    if (!a)//如果malloc失败,可以得到一些log
    {
        perror("malloc");
        return-1;
    }
    sprintf(a, "%s", "HelloWorld\n");//"HelloWorld\n"写入a指向的地址
    printf("%s\n", a);//输出用户输入的数据
    free(a);//释放掉使用的内存地址
    system("pause");
    return 0;//例2有无内存泄露?
}

Dieses Programm wird hauptsächlich zur Erkennung falscher Malloc-Rückgabewertbedingungen verwendet.

Hier müssen wir beachten, dass die Typzuweisung (char *) in C optional ist, in C++ jedoch erforderlich ist, sodass die Verwendung der Typzuweisung die Portierung von C-Programmen nach C++ erleichtert.

Verwenden Sie dynamische Arrays hauptsächlich, um die Programmflexibilität zu erhöhen. Wir können so viele Arrays erstellen, wie wir benötigen. Sie müssen keinen Platz verschwenden.

Weitere Tutorials zur Einführung in die Programmierung finden Sie auf der chinesischen PHP-Website!

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die dynamische Speicherzuweisung in der C-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn