【C】シンプルダイナミックメモリ開発(1)!!
1981 ワード
malloc関数
c言語標準ライブラリには、メモリプールでメモリ(バイト単位)を申請したい関数mallocが用意されています.1つのプログラムが別のメモリを必要とする場合、malloc関数を呼び出して適切なメモリを取得することができ、ユーザーが正常に呼び出すと、関数はメモリのアドレスを返します.注意:ここで申請に成功したメモリは初期化されていません.中にはランダムな値が保存されています.そのため、申請に成功したメモリを初期化する必要があります.
c言語標準ライブラリには、メモリプールでメモリ(バイト単位)を申請したい関数mallocが用意されています.1つのプログラムが別のメモリを必要とする場合、malloc関数を呼び出して適切なメモリを取得することができ、ユーザーが正常に呼び出すと、関数はメモリのアドレスを返します.注意:ここで申請に成功したメモリは初期化されていません.中にはランダムな値が保存されています.そのため、申請に成功したメモリを初期化する必要があります.
#include
#include
#include
int main()
{
int *p = malloc(10*sizeof(int)); //malloc 10 int (40 )
int i = 0;
for (i=0;i<10;i++)
{
*(p+i) = i;
}
for (i=0;i<10;i++)
{
printf("%d ",*(p+i));
}
free(p); //free
memset(p,0,10*sizeof(int)); //memset 0
return 0;
}
:malloc free ,
free
malloc ,free NULL, malloc , free , , , free ( 0)。 。
calloc
calloc malloc , calloc ,calloc 0. calloc , , 。
#include
#include
#include
int main()
{
int *p = calloc(10,sizeof(int ));// calloc 40
//int *p = malloc(10*sizeof(int));
int i = 0;
for (i=0;i<10;i++)
{
*(p+i) = i;
}
for (i=0;i<10;i++)
{
printf("%d ",*(p+i));
}
free(p);
memset(p,0,10*sizeof(int));
return 0;
}
realloc
realloc は、 に り てられたメモリを するのに しています.この を すると、このメモリを または することができます. するとき、realloc は の いメモリを き、 のメモリの のデータを しいメモリにコピーし、メモリを する に します.このとき、 すべきことは、 ろのポインタは、 に いていた メモリのアドレスを すことはできません.メモリを するときは、 じように のメモリを きますが、コピーするときは、 なメモリの のデータが り され、 りのデータが ります.