浅谈内存的分配和释放

内存的分配问题:所有的程序都需要来为它分配内存空间来存储所需要的数据。正如我们写程序:

int a;

float b;

系统都会默认的的为变量a和变量b留出空间

但我们可以在程序运行的时候来分配更多的内存(动态分配

                  一、函数malloc()

1、参数:所需内存的字节数(sizeof(类型名))

2、返回值:返回一个指针类型(返回内存第一个字节的地址)

3、用一个指针变量去接收

    返回类型是void *类型,如果你要使用一个指针变量接收它,需要用到强制类型转换。

 eg:double *p;

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

 这段代码:请求一个30个double类型的空间,并返回double类型的指针,p是作为指向一个double类型值的指针而声明的,而不是指向30个double类型值数据块的指针。如果p指向第一个内存块的第一个元素,就可以像数组名一样去使用.

即 可以用p[0]来访问第一个元素,p[1]来访问第二个元素。(用数组名的方式去使用 指针

                   二、函数calloc()

1、参数:两个参数   (所需内存单元的数量,每个单元占多少字节)

malloc()函数其实就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。

2、返回值:返回一个指针类型(返回内存第一个字节的地址)

3、用一个指针变量去接收

eg:

           long * newmen;

           newmen=(long*)calloc(100,sizeof(long));

4、特性:将块中的全部位置为0.

                  三:函数free()

1、原型:void free(void *p)

2、功能:将指针变量p指向的存储空间释放,交还给系统。

(p只能是程序中此前最后一次调用malloc或calloc函数所返回的地址)

 int *p,*q=(int *)calloc(10,sizeof(int));

p=q;

q++;

free(p);//不可以改用free(q)



malloc()函数其实就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。

猜你喜欢

转载自blog.csdn.net/gxyqn626/article/details/79938104