#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
/*************************************************************
* C语言之动态内存分配函数malloc,calloc,realloc,memset
*
* malloc: void *malloc(size_t size)
* 包含在库函数stdlib.h中,作用是在内存的堆区分配一个大小为size
* 的连续空间,如果分配内存成功,函数返回新分配内存的首地址,否则,
* 返回NULL,一般在写程序需要判断分配内存是否成功,使用完内存后要及
* 时释放内存。
* calloc:void *calloc(size_t num,size_t size)
* 作用是在内存中分配连续大小为num*size的空间,这一点在动态数组内存
* 分配有所体现,如果分配内存成功,函数返回新分配内存的首地址,否则,
* 返回NULL。
* malloc与calloc区别:
* 1、calloc在返回指向内存的指针之前把它初始化为0。
* 2、请求内存数量的方式不同。malloc的参数仅仅是需要分配的
* 内存字节数;calloc的参数包括元素的数量和每个元素的字节数。
* memset:void* memset (void*p, int c, size_t n);
* 作用:将指针p指向的n个字节的内存全部赋值为c。可以对malloc分配的
* 内存进行初始化
*
* realloc void* realloc (void* ptr, size_t size)
* 改变ptr所指内存区域的大小为size长度,如果重新分配成功则返回指向
* 被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用
* free()函数将内存块释放。有一点需要注意:当分配内存成功之后,应
* 将原本的指针ptr=NULL,否则会形成野指针,可能造成系统崩溃。
*
* 提示:不论是以上那种方式申请内存,在申请内存之后,最终都要用free释放空间,
* 不然会造成内存泄漏。但是内存只能释放一次,不能多次调用free函数。
*************************************************************/ int *pm, i;
pm = (int*)malloc(sizeof(int)*);
if(NULL != pm)
{
printf("使用malloc分配的存储空间\n");
for(i=; i<; i++)
{
printf("%d\t", *pm++);
if((i+)% == ) printf("\n");
} printf("\n"); free(pm);
pm = NULL;
}
int *pc;
pc = (int *)calloc(, sizeof(int));
printf("使用calloc分配的存储空间\n");
for (int i=; i<; i++)
{ if(NULL != pc)
{
printf("%d\t", *pc++ );
if((i+)% == ) printf("\n");
} }
printf("\n");
free(pc);
pc = NULL;
int *pms = (int *)malloc(sizeof(int)*);
if(NULL != pms)
{
memset(pms, , );
}
printf("使用memset分配的存储空间\n");
for (int i=; i<; i++)
{
if(NULL != pms)
{
printf("%d\t", *pms++ );
if((i+)% == ) printf("\n");
} }
printf("\n");
free(pms);
pms = NULL;
printf("使用realloc分配的存储空间\n");
int *pre = (int *)malloc(sizeof(int) * );
if (NULL != pre)
{
pre = (int *)realloc(pre,sizeof(int)*);
if (NULL != pre)
{
for (i=; i<; i++)
{
printf("%d\t", *pre++);
if((i+)% == ) printf("\n");
}
}
}
printf("\n");
free(pre);
pre = NULL; return ;
}
使用malloc分配的存储空间

                    -    -    -
- - - - - - - - 使用calloc分配的存储空间 使用memset分配的存储空间 使用realloc分配的存储空间 -

C语言之内存分配函数的更多相关文章

  1. C语言内存分配函数malloc——————【Badboy】

    C语言中经常使用的内存分配函数有malloc.calloc和realloc等三个,当中.最经常使用的肯定是malloc,这里简单说一下这三者的差别和联系. 1.声明 这三个函数都在stdlib.h库文 ...

  2. C语言中内存分配那些事儿

    C程序的内存结构 C语言的之所以复杂,首先它的内存模型功不可没.不像某些那样的高级语言只需要在使用对象的时候,用new创建.所有之后的事情,你不需要操心.对于C语言,所有与内存相关的东西,都需要熟悉, ...

  3. C内存分配函数

    C语言跟内存分配方式(1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.(2) 在栈上创建.在执行函数时,函数内局部变量的 ...

  4. 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca

    转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...

  5. C语言中内存分配 (转)

    在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...

  6. Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)

    Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/ ...

  7. 【转】C语言中内存分配

    原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...

  8. C语言中内存分配

     C语言中内存分配   在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...

  9. C标准库-数值字符串转换与内存分配函数

    原文链接:http://www.orlion.ga/977/ 一.数值字符串转换函数 #include <stdlib.h> int atoi(const char *nptr); dou ...

随机推荐

  1. git清理工作区

    git clean -f 这将删除所有未被追踪的文件 git rev-list

  2. MySQL中的关系

    关系 将实体与实体的关系,反应到最终数据库表的设计中来.将关系分为三种:一对一,一对多(多对一)和多对多.所有的关系都是指的是表与表之间的关系. 一对一 一张表中的一条记录一定只能与另外一张表的一条记 ...

  3. CentOS 7 配置SFTP

    目前越来越多的FTP客户端软件开始支持SSH协议上传和下载文件,这种协议方式就是SFTP. SFTP的优势主要有两点,一是不需要再配置个FTP服务端:二是SSH协议是安全传输,上传和下载是经过加密的. ...

  4. 推荐一款 MyBatis 开发神器,为简化而生!

    Java技术栈 )); MyBatis-Plus将会生成以下查询SQL: SELECT * FROM user WHERE age >= 18FROM user WHERE age >=  ...

  5. 2018年分享的Spring Cloud 2.x系列文章

    还有几个小时2018年就要过去了,盘点一下小编从做做公众号以来发送了273篇文章,其中包含原创文章90篇,虽然原创的有点少,但是2019年小编将一如既往给大家分享跟多的干货,分享工作中的经验,让大家在 ...

  6. springMVC相应之返回值

    string返回值: <%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/11/12 Time: 16:24 To cha ...

  7. systemd-tmpfiles - Operation not permitted chown ; systemd-modules-load.service

    systemd-tmpfiles-setup.service  fail  一般为 /exports/rfs/var/lib/systemd/ 下的文件属性问题 , chown -R   root:r ...

  8. Nodejs base64编码与解码

    1、普通字符串 //编码 new Buffer(String).toString('base64'); //解码 new Buffer(base64Str, 'base64').toString(); ...

  9. 57. Collections(list的工具类)、Arrays(数组的工具类)

    List集合的工具类(Collections): 注意:Collection是单列集合的根接口  Collections是操作集合对象的工具类 1.对list集合排序: sort(List) 根据自然 ...

  10. c#开发应避免的几个小滥用

    一 String和StringBuilder              少量的字符串操作不宜采用StringBuilder.      由于string是不可变得对象,对于string的叠加,每次操作 ...