本章将介绍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语言内存管理相关推荐

  1. C语言与Java怎么沟通_c语言初学指针,对于java面向对象的初理解

    最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...

  2. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  3. python和c语言的区别-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  4. C语言与JAVA内存管理_C语言动态内存管理和动态内存分配

    动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序.标准库提供以下四个函数用于动态内存管理: (1) malloc().calloc() 分配新的内存区域. ...

  5. java 函数表_C语言、Java语言的符号表区别和特点是什么?分别是如和处理函数参数的?...

    1.语法类似: 由于Java可以算是从C 发展而来的,因此Java与C语言的语法比较类似 2.编程的熟练程度就是对语言程序库的掌握程度: 从某种程度上来说,编程语言都是由语法和相应的程序库所构成,Ja ...

  6. c程序设计语言 qsort,【程序设计基础_C语言】北理工的恶龙(附qsort范例)

    [程序设计基础_C语言]北理工的恶龙(附qsort实例) 北理工的恶龙(附qsort实例) 背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集 ...

  7. vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt

    第1章_C语言概述(vc环境如何运行c语言程序)[精选] C语言程序设计 授课对象:电子商务06 时间安排: 理论课(1-9周): 星期一 5-6节 9407D 星期三 5-6节 9410D 实验课( ...

  8. c语言最小点对问题_C语言教程(一):程序开发理论基础!

    前言: 1.本系列教程适用于刚开始学习 C 语言的同学,或者初级开发者,或者想系统详细了解 C 语言的小伙伴. 2.本系列教程会从C语言基础到 C 语言高级语法,包含 C 语言所有系列. C语言简介 ...

  9. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

最新文章

  1. 【Docker】Linux安装docker-compose
  2. spring AspectJ的Execution详解
  3. gulp与grunt对比
  4. kubeadm安装k8s 1.13版本
  5. TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案
  6. modprobe: FATAL: Module xxx.ko not found in directory /lib/modules/$(uname -r)
  7. LSSS线性秘密共享方案详细构造方法与原理解释
  8. 利器:服务器与CST时间误差8小时的修复方法——timedatectl
  9. 那些年移动互联网行业曾经走过的弯路
  10. 泛型TListT Generics.Collections单元
  11. java发牌程序_求解,用JAVA写洗牌与发牌模拟程序
  12. Springboot实现发送邮件功能
  13. 基于python下django框架 实现校园排课选课系统详细设计
  14. Power Bi Desktop 的删除重复项 和 Excel 的删除重复项的一样的吗?
  15. 大直径硅晶圆在单晶炉高温高速热处理过程中的热行为
  16. 易安卓E4A载入创建新窗口
  17. Java 经典设计模式-- 05.并发型模式
  18. C语言float转字符串并保留小数点后2位
  19. Ansoft Maxwell学习
  20. STM32CubeMX安装及使用教程(一)

热门文章

  1. Spring线程池服务
  2. android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...
  3. Linux 命令之 unrar -- 解压 rar 格式的文件
  4. Linux 命令之 stat -- 显示文件的状态信息
  5. MyEclipse 如何将 jar 包导入项目中
  6. java 中允许键重复的,二叉搜索树的定义是否允许重复键?
  7. c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)
  8. hibernate框架 最新_java框架,使用最频繁的9个程序!
  9. php thread linux,Linux_linux内核函数kernel_thread,设备驱动程序中,如果需要几 - phpStudy...
  10. mysql可以存布尔_哪个MySQL数据类型用于存储布尔值