C言語学習:のmalloc()関数

関数の宣言:

void *malloc(size_t size)

ヘッダー:

#include <stdio.h>

関数の説明:

  • 割り当てメモリ空間が必要であり、それへのポインタを返します。

パラメータ:

  • サイズ - バイトのメモリブロックのサイズ、。

戻り値:

  • 関数は、割り当てられたメモリのサイズへのポインタを返します。要求が失敗した場合、NULLが返されます。

例:

次の例では、malloc関数()関数の使い方を示しています。

#include <stdio.h>
#include <stdlib.h>

void update_value(int* p){
	*p = 100;
}

int main()
{
	//在栈上面分配变量a 占4个字节
	int a = 10;
   	//申请类型是int内存空间;占4个字节;p指针指向该4个字节的内存空间        
   	int *p = (int*)malloc(sizeof(int));
   	//p变量也占4字节;所以sizeof(p)=8个字节
   	//赋值p只指向的动态空间为50
   	*p = 50;
   	printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));

   	free(p);//修改p指向的内存中的数据
   	printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));
 
 	update_value(p);
 	printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));
   	return(0);
}

注:未使用メモリは、解放されたメモリ・ブロックの空き()関数を使用します。

無効 *:未定型はポインタを表し、C / C ++の規定がvoid*強い手の他の型に変換することができ、他のタイプに無効であるが、強力なターンを必要とせずに、直接に割り当てることができことわざがあるが、その逆はありませんことができます。

malloc関数:割り当てられたメモリのサイズは、少なくともパラメータで指定されたバイト数です。

malloc戻り値は、メモリ使用可能期間内の開始位置へのポインタ、メモリの始点アドレスの有効期間に複数の呼び出しであるmalloc特定のアドレスが割り当てられていない限りはmalloc malloc関数を解放すべきではない重複割り当てられたアドレスそれはできるだけ早くとメモリの割り当てに復帰機能を調整するメモリとメモリサイズの解放を達成しながら(のreallocと自由を)達成のmalloc(割り当てアルゴリズムはNP困難のメモリを使用することはできません)として完成されなければなりません

mallocそしてfree、アプリケーションがある場合は理由もなく、それは何もしなかったリリースである、唯一の解放後にリリースされることができればスペースが誤って2回以上を解放する場合は、メモリリークを解放しませんペア(ただし、ポインタ例外が発生したヌルをリリースしていますNULLポインタのリリースでは、リリースが可能ですので、どのように何回、何もするに等しいです。)

公開された100元の記事 ウォン称賛45 ビュー640 000 +

おすすめ

転載: blog.csdn.net/wangzhongshun/article/details/101430545
おすすめ