动态分配函数

动态分配函数

批量数据的存储
动态内存分配函数
#include <stdlib.h>
c提供下列与动态内存分配相关的函数:

void   * malloc(unsigned int size);
void   * calloc(unsigned int n,unsigned int size);//分配n个,每个大小为size
void   *realloc(void * p_block,unsignde int size);//重新分配
void   free(void * p_block);//释放

常用的malloc和free函数:
(1)malloc函数

void   * malloc(unsigned int size);

向系统申请分配指定字节数的存储空间,
分配size字节存储空间,分配成功返回首地址,
分配失败返回NULL。

int i,*p=(int*)malloc(6*sizeof(int));
if(p)
    for(i=0;i<6;i++) p[i]=i;
    else
    printf("dynamic alloc failed!")

(2)free函数

 void   free(void * p_block);

释放p_block指向的动态分配的存储空间。
如:free§;
一旦释放,就不能再用该指针引用存储区内的数据。
如果指针为NULL,free函数无释放操作。
注意:动态分配的存储空间一定要用free函数释放,而静态分配的存储空间当程序运行完成的时候自动释放。

int *p;    //定义指针变量p
p=(int *)malloc(sizeof(int));  //分配存放整型数据的存储空间,地址赋给p 
if(p == NULL)  //如果内存分配不成功
{  
    printf(“Memory allocation failed. Googbye.\n”); 
    exit(1);  //停止进程执行,异常退出,并清空内存及所使用的相关数据结构  
}
……
free(p);  //释放p所指向的存储空间

(3)calloc函数:

void   * calloc(unsigned int n,unsigned int size);

向系统申请分配n项大小相同的存储空间
分配成功:返回新分配存储空间的首地址,新分配存储空间均被初始化为0;
分配失败:返回NULL
例如:int *q=(int*)calloc(6*sizeof(int));
可以替代mallocint *q=(int*)malloc(6*sizeof(int));
(如果不考虑初始化的值)

(4)realloc函数

void   *realloc(void * p_block,unsignde int size);

对指针所指向的已动态分配的存储空间重新进行动态存储分配
如果缩小空间则返回的地址是原地址;
如果是扩大空间,则有三可能
①原空间位置足够的空间可以扩充,返回的地址与扩充前的地址相同;
②如果原位置无足够的空间,按照size指定的大小重新分配空间,将原有的数据从头到尾拷贝到新分配的内存区域,而后释放原来指针所指内存区域,同时返回新分配的内存区域的首地址;
③否则说明内存无足够的空间可以分配,分配失败,返回值为NULL。

动态数组实现的一般过程:
①定义数组元素类型(t)的指针§
②指定数组要存放的元素个数(n)
③动态申请(n*sizeof(t))大小的存储空间,并让p指向该存储空间首地址
④通过p对数组进行赋值和操作
⑤使用结束后释放数组空间

发布了183 篇原创文章 · 获赞 5 · 访问量 8851

猜你喜欢

转载自blog.csdn.net/qq_45666654/article/details/104744372