温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

动态内存分配

发布时间:2020-07-09 08:05:01 来源:网络 阅读:652 作者:柠檬dream 栏目:编程语言

c语言动态内存分配

 主要初步介绍malloc、calloc、realloc、free的基本用法。都是标准的库函数,在stdlib.h库内。

 malloc、free

分别用于动态内存分配和释放

调用形式: (类型说明符*) malloc (size) ,“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针,malloc分配的内存是位于堆上的,并且没有初始化内存的内容。malloc动态开辟一块长度为size字节的连续区域,size为需要内存空间的长度,返回该区域的首地址。malloc分配存储空间时,必须由我们计算需要的字节数。如果想要分配10int型的空间,那就是说需要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分配内存大小


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI