文档章节

我的C语言入门到精通之路 day07

生命奇迹泉
 生命奇迹泉
发布于 2016/04/20 15:42
字数 931
阅读 1
收藏 0

动态分配

 

1、 数组只能处理小数据

   例如:定义数组  int  a[1024*1024*10] ; 运行报错

 

2、动态分配,是指用户可以在程序运行期间根据需要申请或释放内存,大小也完全可控。动态分配不像数组内存那样需要预先分配空间,而是由系统根据程序需要动态分配,大小完全按照用户的要求来,当使用完毕后,用户还可释放所申请的动态内存,由系统回收,以备他用。

malloc和free是C标准库中提供的两个函数,用以动态申请和释放内存

 

n malloc()函数的基本调用格式为:

n void *malloc( unsigned int size );

n 参数size是个无符号整型数,用户由此控制申请内存的大小,执行成功时,系统会为程序开辟一块大小为size个内存字节的区域,并将该区域的首地址返回,用户可利用该地址管理并使用该块内存,如果申请失败(比如内存大小不够用),返回空指针NULL。

 

在栈区开辟一段内存,系统会自己回收。

 在堆区开辟一段内存,需要自己手动用free释放内存

 开辟内存后立即释放掉

 

free就是释放内存,例如free(p)

 malloc()函数返回类型是void*,用其返回值对其他类型指针赋值时,必须进行显式转换。

 

free函数注意事项

 

 

1、malloc函数和free函数 在stdlib.h头文件里面

 

 

2、蚕食法消耗内存

while(1)

{

   //malloc分配内存,单位为字节,返回值是这一片内存的地址,类型为void空指针

void  *p=malloc(1024*1024*100);

Sleep(1000);  //休眠1秒

 

free(p); //释放内存

 

//free(p);  //释放内存,只能释放一次

 

Sleep(1000);

}


malloc_calloc_realloc

 1、C语言标准库函数还提供了calloc函数用以动态申请内存,和malloc函数以字节为单位申请内存不同,calloc函数是以目标对象为单位分配的,目标对象可以是数组,也可以是后面会讲到的结构体等。

 

n calloc函数的原型为:

n void* calloc(size_t num, size_t size);

n malloc()函数返回类型也是void*,需要强制转换才能为其他类型的指针赋值。calloc需要两个参数以指定申请内存块的大小,一是对象占据的内存字节数size,二是对象的个数num。

n size_t类型是无符号整型,在Windows及LCC编译环境下,其定义为:

n typedef unsigned int size_t;

n 为已经分配的内存重新分配空间并复制内容

n  realloc()函数有两个参数

n  已分配的内存地址

n  重新分配的字节数

void *realloc( void *ptr, size_t size );

 

2、 calloc会自动将内存初始化为0,malloc就不会

  int num;

scanf("%d",&num);

(1)malloc函数

//动态数组,输入19,就有19个元素,初始化

int  *p=(int *)malloc(sizeof(int)*num);  

 

如果指针p==NULL则内存分配失败,否则就分配成功

 (2)calloc

 int  *p=(int *)calloc(num,sizeof(int)); //动态分配

//第一个参数,多少个, 第二个参数元素占多大

如果指针p==NULL则内存分配失败,否则就分配成功

 

(3)relloc

 relloc 如果可以拓展就拓展,否则就重新分配

拓展就是在原来地址后面增加内存。

不够的情况下,就回收原来的内存,并在回收之前分配一片内存,将原来的内容拷贝过来。然后收回原来的内存。

 addnum增加的个数

 


 

 

本文转载自:http://blog.csdn.net/shengmingqijiquan/article/details/47304693

生命奇迹泉
粉丝 1
博文 42
码字总数 0
作品 0
海淀
程序员
私信 提问
C语言的大门,从入门到精通,你能想象它的距离有多大吗?

C语言作为一种编程语言,它的发展可谓历经千辛万苦。我们总是在说,程序员所做的就是天天敲代码,但是单单敲代码可是永远也学不会C语言的更深一层的所蕴含的知识。 零基础小白到大神之路,欢...

诸葛玥
2018/03/16
0
0
C语言编程的大门,从入门到精通,你能想象它的距离有多大吗?

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/03/19
0
0
「C语言入门到精通」C语言简介第01课

「C语言入门到精通」C语言简介第01课 学习资料,直播课程,群专业解答老师,群文件免费源码 C/C++9群 99816772 主要内容: 【C语言入门到精通】C语言简介第01课 主要内容: 1.C语言最简单的框...

这个人很懒什么都没留下
2017/11/11
0
0
本人现在自学Java,正在往Android转。每天生活在地狱当中,很多问题让我不知所措。

@马丁当 你好,想跟你请教个问题: 我学程序,主要是两个因素,一:我刚毕业,处于实习期间,然后不知道找什么工作。二:我的叔叔也是做程序员的,做了几十年。家里人觉得这行有出息,叫我来...

程序伐木累
2016/09/11
6.2K
56
一些Linux相关的技术电子书

推荐书籍: 《Linux:鸟哥私房菜》1700页全文清晰版 《高性能Linux服务器构建实战》电子版 Linux on Power 技术及案例分享 《精通Linux网络服务器配置·管理·检测·应用》 《循序渐进Linux...

小骏骏
2015/09/09
60
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
267
6
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部