C语言之内存分配函数
#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语言之内存分配函数的更多相关文章
- C语言内存分配函数malloc——————【Badboy】
C语言中经常使用的内存分配函数有malloc.calloc和realloc等三个,当中.最经常使用的肯定是malloc,这里简单说一下这三者的差别和联系. 1.声明 这三个函数都在stdlib.h库文 ...
- C语言中内存分配那些事儿
C程序的内存结构 C语言的之所以复杂,首先它的内存模型功不可没.不像某些那样的高级语言只需要在使用对象的时候,用new创建.所有之后的事情,你不需要操心.对于C语言,所有与内存相关的东西,都需要熟悉, ...
- C内存分配函数
C语言跟内存分配方式(1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.(2) 在栈上创建.在执行函数时,函数内局部变量的 ...
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- C语言中内存分配 (转)
在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...
- Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)
Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/ ...
- 【转】C语言中内存分配
原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- C语言中内存分配
C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- C标准库-数值字符串转换与内存分配函数
原文链接:http://www.orlion.ga/977/ 一.数值字符串转换函数 #include <stdlib.h> int atoi(const char *nptr); dou ...
随机推荐
- PAT(A) 1042. Shuffling Machine (20)
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...
- redis 学习入门篇
基本概念 redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库(非关系性数据库). redis的特点 速度快,因为数据存在内存中,读写数据的时候都不 ...
- USACO 2014 US Open Odometer /// 枚举
题目大意: 给定区间 l r 求区间包含多少个数 它们各个位的数只有一个不一样 注意 多个位但多个数为0单个数为x的情况 这种情况只有 x000 即把单个数放在首位才是正确的 同样注意 多个位但单个数 ...
- vue - blog开发学习3
1.添加less 和less-loader支持 npm install less less-loader --save-dev 2.新建main.less,将这个样式添加到home.vue中的cont ...
- MySQL锁机制浅析
MySQL使用了3种锁机制 行级锁,开销大,加锁慢,会出现死锁,发生锁冲突的概率最高,并发度也最高 表级锁,开销小,加锁快,不会出现死锁,发生锁冲突的概率最低,并发度最低 页级锁,开销和加锁时间界于表 ...
- idea的spring配置
开始使用idea,开始的时候把相关的插件都禁用了,导致在建项目和configuration的时候不出现spring相关字样 到plugins中找到installed的插件,查看spring boot ...
- Centos7系统安装笔记
Centos 7安装步骤 对应参数,可修改 1.一台主机对应一个服务器,需要先安装Centos 7(内网)2.F12 boot 进入boot模式3.选择安装方式:USE或其他4.根据底部文字提示,点击 ...
- Codeforces 1163F 最短路 + 线段树 (删边最短路)
题意:给你一张无向图,有若干次操作,每次操作会修改一条边的边权,每次修改后输出1到n的最短路.修改相互独立. 思路:我们先以起点和终点为根,找出最短路径树,现在有两种情况: 1:修改的边不是1到n的最 ...
- 取消SVN感叹号即去除版本库
之前不小心直接将版本库 的内容检出 到桌面,后才发现桌面上的文件 都变成了问号,本来也以为没有多大问题,删除 .svn 即可,可是删除所有的.svn后,桌面上还是显示问号,刷新了很多次,还重启电脑 了 ...
- python输入问题
1.关于python的输入问题: 在2.x版本单行单输入input,单行多输入raw_input 在3.x版本中就已经没有raw_input,只有input,单行单输入多输入都可以. 类似2 3 4的 ...