C语言与JAVA内存管理_C语言内存管理
本章将介绍C语言动态内存管理. C语言编程语言提供了多种功能的内存分配和管理。这些函数可以在头文件中找到。
S.N.
函数与说明
1
void *calloc(int num, int size);
此函数分配num元素其中每一个字节大小为(size)的数组
2
void free(void *address);
此函数释放由地址指定的存储器块的块
3
void *malloc(int num);
这个函数分配num个字节数组,并把它们初始化
4
void *realloc(void *address, int newsize);
此函数重新分配内存达其扩展newsize
分配内存动态
当编写程序,如果知道一个数组的大小,那么它是很简单的,可以把它定义为一个数组。例如存储任何人的名字,它可以最多100个字符,这样就可以定义的东西如下:
charname[100];
但是,现在让我们考虑一个情况,如果不知道需要存储文本的长度,比如想存储有关的话题的详细说明。在这里,我们需要定义一个指针字符没有定义的基础上规定,如在下面的例子中,我们可以分配的内存是多少内存要求更长字段:
#include#include#includeintmain(){charname[100];char*description;strcpy(name,"Zara Ali");/* allocate memory dynamically */description=malloc(200*sizeof(char));if(description==NULL){fprintf(stderr,"Error - unable to allocate required memory
");}else{strcpy(description,"Zara ali a DPS student in class 10th");}printf("Name = %s
",name);printf("Description: %s
",description);}
当上述代码被编译和执行时,它产生了以下结果。
Name = Zara Ali
Description: Zara ali a DPS student in class 10th
同样的程序可以通过calloc()只需要用calloc代替malloc完成如下:
calloc(200,sizeof(char));
所以完全的控制,可以通过任何大小的值,而分配的内存在不同的地方,一旦定义的大小之后就不能改变数组。
调整大小和释放内存
当程序执行出来后,操作系统会自动释放所有程序,但作为一个很好的做法,当不在需要的内存分配的内存了,那么应该通过调用free()函数释放内存。
另外,也可以增加或通过调用realloc()函数减少已分配的内存块的大小。让我们再一次检查上面的程序,并利用realloc()和free()函数:
#include#include#includeintmain(){charname[100];char*description;strcpy(name,"Zara Ali");/* allocate memory dynamically */description=malloc(30*sizeof(char));if(description==NULL){fprintf(stderr,"Error - unable to allocate required memory
");}else{strcpy(description,"Zara ali a DPS student.");}/* suppose you want to store bigger description */description=realloc(description,100*sizeof(char));if(description==NULL){fprintf(stderr,"Error - unable to allocate required memory
");}else{strcat(description,"She is in class 10th");}printf("Name = %s
",name);printf("Description: %s
",description);/* release memory using free() function */free(description);}
当上述代码被编译和执行时,它产生了以下结果。
Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th
可以试试上面的例子不重新分配额外的内存,那么strcat()函数将因缺乏描述可用内存给出一个错误。
¥ 我要打赏
纠错/补充
收藏
上一篇:
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
C语言与JAVA内存管理_C语言内存管理相关推荐
- C语言与Java怎么沟通_c语言初学指针,对于java面向对象的初理解
最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...
- c语言 python-C语言、Java语言和python语言的区别在哪里
原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...
- python和c语言的区别-C语言、Java语言和python语言的区别在哪里
原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...
- C语言与JAVA内存管理_C语言动态内存管理和动态内存分配
动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序.标准库提供以下四个函数用于动态内存管理: (1) malloc().calloc() 分配新的内存区域. ...
- java 函数表_C语言、Java语言的符号表区别和特点是什么?分别是如和处理函数参数的?...
1.语法类似: 由于Java可以算是从C 发展而来的,因此Java与C语言的语法比较类似 2.编程的熟练程度就是对语言程序库的掌握程度: 从某种程度上来说,编程语言都是由语法和相应的程序库所构成,Ja ...
- c程序设计语言 qsort,【程序设计基础_C语言】北理工的恶龙(附qsort范例)
[程序设计基础_C语言]北理工的恶龙(附qsort实例) 北理工的恶龙(附qsort实例) 背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集 ...
- vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt
第1章_C语言概述(vc环境如何运行c语言程序)[精选] C语言程序设计 授课对象:电子商务06 时间安排: 理论课(1-9周): 星期一 5-6节 9407D 星期三 5-6节 9410D 实验课( ...
- c语言最小点对问题_C语言教程(一):程序开发理论基础!
前言: 1.本系列教程适用于刚开始学习 C 语言的同学,或者初级开发者,或者想系统详细了解 C 语言的小伙伴. 2.本系列教程会从C语言基础到 C 语言高级语法,包含 C 语言所有系列. C语言简介 ...
- c语言float二进制输出代码_C语言学习笔记——学前知识概述
将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...
最新文章
- 【Docker】Linux安装docker-compose
- spring AspectJ的Execution详解
- gulp与grunt对比
- kubeadm安装k8s 1.13版本
- TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案
- modprobe: FATAL: Module xxx.ko not found in directory /lib/modules/$(uname -r)
- LSSS线性秘密共享方案详细构造方法与原理解释
- 利器:服务器与CST时间误差8小时的修复方法——timedatectl
- 那些年移动互联网行业曾经走过的弯路
- 泛型TListT Generics.Collections单元
- java发牌程序_求解,用JAVA写洗牌与发牌模拟程序
- Springboot实现发送邮件功能
- 基于python下django框架 实现校园排课选课系统详细设计
- Power Bi Desktop 的删除重复项 和 Excel 的删除重复项的一样的吗?
- 大直径硅晶圆在单晶炉高温高速热处理过程中的热行为
- 易安卓E4A载入创建新窗口
- Java 经典设计模式-- 05.并发型模式
- C语言float转字符串并保留小数点后2位
- Ansoft Maxwell学习
- STM32CubeMX安装及使用教程(一)
热门文章
- Spring线程池服务
- android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...
- Linux 命令之 unrar -- 解压 rar 格式的文件
- Linux 命令之 stat -- 显示文件的状态信息
- MyEclipse 如何将 jar 包导入项目中
- java 中允许键重复的,二叉搜索树的定义是否允许重复键?
- c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)
- hibernate框架 最新_java框架,使用最频繁的9个程序!
- php thread linux,Linux_linux内核函数kernel_thread,设备驱动程序中,如果需要几 - phpStudy...
- mysql可以存布尔_哪个MySQL数据类型用于存储布尔值