动态内存分配
c语言动态内存分配
主要初步介绍malloc、calloc、realloc、free的基本用法。都是标准的库函数,在stdlib.h库内。
malloc、free
分别用于动态内存分配和释放
,调用形式: (类型说明符*) malloc (size) ,“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针,malloc分配的内存是位于堆上的,并且没有初始化内存的内容。malloc动态开辟一块长度为size字节的连续区域,size为需要内存空间的长度,返回该区域的首地址。用malloc分配存储空间时,必须由我们计算需要的字节数。如果想要分配10个int型的空间,那就是说需要10*sizeof(int)的内存空间。malloc分配的内存空间也有缺点,如果由malloc函数分配的内存空间原来没有被使用过,则其中的每一位都有可能是0,反之,如果这部分内存曾经被分配过,则其中可能遗留各种各样的数据。也就是说,使用malloc()函数分配内存时可能会出现问题。
int*p=(int*)malloc(10*sizeof(int));///分配完内存没有初始化
calloc 也用于分配内存空间。调用形式: (类型说明符*)calloc(n,size) ,在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。colloc与malloc类似,但是主要的区别是存储在已分配的内存空间中的值默认为0,使用malloc时,已分配的内存中可以是任意的值. colloc需要两个参数,第一个是需要分配内存的变量的个数,第二个是每个变量的大小.
int*q=(int*)calloc(5,sizeof(int));//calloc=malloc+memset//分配完内存自动初始化
realloc(p,5*sizeof(char));更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小.如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
注意:这里原始内存中的数据还是保持不变的。
*p=realloc(p,5*sizeof(char));//修改malloc分配内存大小
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。