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 ...
随机推荐
- JSON 和 xml 浅读
1. JSON数据格式 JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中:名称是字符串,使用双引号表示.值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在 ...
- 理解Java GC日志
idea 在vm options处加入-XX:+PrintGCDetails,可打印GC日志. public class ReferenceCountingGC { public Object ins ...
- String转list
String l = "63, 47, 51, 35, 36, 52, 37, 53, 38, 54, 39, 55, 40, 56, 41, 57, 42";List<In ...
- handsontable 随记
handsontable 怎么样获取合并之后的cell信息,如下 handsontable .getPlugin('mergeCells').mergedCellsCollection 看了他的源代码 ...
- windows10自带的画图软件打出来的字是斜的,怎么解决?
因为字体中带@的字体,方向就是斜的,所以打字时不要用前面带@符号的字体. 用其他字体方向为正常的
- Eclipse编辑Spring配置文件xml时自动提示类class包名
第一步,先查看下自己的Eclipse是什么版本,步骤如下: 1.1 点击Eclipse菜单‘Help -> About Eclipse’,如下图: 1.2 点击Eclipse图标如下,看清楚哦 ...
- nodejs 静态资源文件与登陆交互
server2.js var express=require('express'); var expressStatic=require('express-static'); var server=e ...
- iftop简单使用
在linux下想查看当前与主机通信的IP有哪些?流量多少?怎么办?使用iftop吧,小巧实用的小工具.在排查问题的时候能起到大作用. centos安装 yum install iftop 界面如下: ...
- Spring Boot 2.0 常见问题总结(一)
SpringBoot2.x 依赖环境和版本新特性说明 依赖版本 jdk8 以上, Springboot2.x 用 JDK8 , 因为底层是 Spring framework5 . jar 包方式运行 ...
- 「AHOI / HNOI2018」转盘 解题报告
「AHOI / HNOI2018」转盘 可能是我语文水平不太行... 首先可以猜到一些事实,这个策略一定可以被一个式子表示出来,不然带修修改个锤子. 然后我们发现,可以枚举起点,然后直接往前走,如果要 ...