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 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值