C言語で動的メモリ割り当てを実装する方法
プログラム用にあらかじめメモリ空間を空けてから動作させることがよくあります。
int arr[5] ;
この配列を定義するときは、事前にスペースを空けておく必要があります。プログラムの実行中、この開いたメモリスペースは常に存在し、関数が実行されない限り、スペースは解放されます。 1 つの問題は、この配列をプログラム内で変更できないことです。
これらの問題により使用上不便が生じるため、C では malloc() 関数が提供されています。
malloc() 関数に関して、この関数は 1 つのパラメータ、つまり必要なメモリのバイト数を受け入れます。次に、malloc() は、使用可能なメモリ内で適切なサイズのブロックを見つけます。このプロセスでは、malloc() はそのメモリの最初のバイトのアドレスを返すことができます。つまり、ポインタを使って操作できるということになります。 malloc() は配列ポインタや構造体ポインタなどを返すために使用できるため、戻り値の型を適切な型に割り当てる必要があります。 malloc() が必要なスペースを見つけられない場合、null ポインタを返します。
例:
推奨学習: c 言語ビデオ チュートリアル
double *p; p=(double*)malloc(30*sizeof(double));
このプログラムでは、まず 30 個の double 型スペースを開き、次に Point pこの空間内の位置に移動します。ここでのポインタは、最初の double 値を指します。私たちが開いた 30 のダブルスペースのすべてが開いたわけではありません。これは配列と同様で、配列へのポインタは配列全体の要素ではなく、配列の最初の要素のアドレスを指します。したがって、ここでの操作は配列の場合と同じで、
p[0] が最初の要素、p[1] が 2 番目の要素です。
この時点で、動的配列を宣言する方法をマスターできます。
int arr[n]; p=(int *)malloc(n*sizeof(int)); //我们在这里使用的时候要元素个数乘类型字节长度,这样就达到了动态开辟内存空间。
malloc() を使用してメモリ空間をオープンした後は、メモリ空間を解放することだけを考慮する必要があります。ここで、C は free() 関数を提供します。 free() のパラメータは、malloc() 関数によって返されるアドレスであり、前の malloc() 関数によって開かれたスペースを解放します。
例:
上で開いたスペースを解放するには、次のようにします。
free(p);
プログラムは、メモリ内にある exit() 関数も呼び出します。割り当てに失敗した場合のプログラム。
プログラム例:
#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有无内存泄露? }
このプログラムは主に、不正な malloc 戻り値条件を検出するために使用されます。
ここで、C では型の割り当て (char *) はオプションですが、C ではこれが必須であることに注意する必要があります。そのため、型の割り当てを使用すると、C プログラムを C に移植しやすくなります。
動的配列は主にプログラムの柔軟性を得るために使用します。必要な数の配列を作成できます。スペースを無駄にする必要はありません。
プログラミング入門チュートリアルの詳細については、PHP 中国語 Web サイトに注目してください。
以上がC言語で動的メモリ割り当てを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。