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 ...
随机推荐
- docker内的应用访问宿主机上的mysql和Redis
背景:宿主机部署MySQL.Redis,docker内部署tomcat.jdk 需求:tomcat内的应用访问宿主机的MySQL和Redis 方法: 一.连接地址切记不能用localhost和 ...
- Joda-Time 入门
Joda-Time 令时间和日期值变得易于管理.操作和理解.事实上,易于使用是 Joda 的主要设计目标.其他目标包括可扩展性.完整的特性集以及对多种日历系统的支持.并且 Joda 与 JDK 是百分 ...
- scss定义全局变量引入sass-resources-loader报错
开发jquery多页应用,引入sass-resources-loader后报 Make sure 'options.resources' is String or Array of Strings. ...
- opensns的URL模式
URL模式 如果我们直接访问入口文件的话,由于URL中没有模块.控制器和操作,因此系统会访问默认模块(Home)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的: htt ...
- 前端用vue,后端需要nodejs吗?
其实用脚趾头想想也知道:后端用不用node,和前端用不用vue,二者完全没关系. 那为何用vue和vue插件开发前端的时候,经常需要各种npm install呢?为何要在本地安装node环境? 本地需 ...
- java笔试手写算法面试题大全含答案
1.统计一篇英文文章单词个数.public class WordCounting {public static void main(String[] args) {try(FileReader fr ...
- codeforces round 433 C. Planning 贪心
题目大意: 输入n,k,代表n列航班,初始始发实践为1,2,3分钟以此类推,然后输入n个整数分别代表延迟1分钟第i个航班损失多少钱,然后调整后的始发时间表是这样的,任何一辆航班的始发时间不能在他的初始 ...
- spark算子之Aggregate
Aggregate函数 一.源码定义 /** * Aggregate the elements of each partition, and then the results for all the ...
- IT类影视
1.爱奇艺 代码(The Code) 2.爱奇艺 操作系统革命(Revolution OS) 3.爱奇艺 互联网之子 4.爱奇艺 深网
- java 获取String出现最多次数的字段
package hello; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator ...