【C】简单动态内存开辟(1)!!
来源:互联网 发布:宁波plc编程招聘 编辑:程序博客网 时间:2024/05/17 02:49
malloc函数
在c语言标准库里面提供了函数malloc,这个函数是想内存池里面申请内存(字节为单位)。当一个程序另外需要一些内存的时候就可以调用malloc函数来获取一块适合的内存,当用户调用成功时,函数会返回一个内存的地址。注意:这里申请成功的内存并没有初始化,里面存的是一些随机值,因此当申请成功一块内存的时候初始化非常有必要。
#include<stdio.h>#include <stdlib.h>#include <string.h>int main(){int *p = malloc(10*sizeof(int)); //malloc函数向内存里面申请10个int型的内存(40字节)int i = 0;for (i=0;i<10;i++){*(p+i) = i;}for (i=0;i<10;i++){printf("%d ",*(p+i));}free(p); //free函数将申请好的 内存释放memset(p,0,10*sizeof(int)); //memset函数将释放掉的内存进行初始化为0return 0;}注:malloc函数一定要和free函数成对使用,否则将会造成内存泄露
free函数
这个函数是释放掉用malloc函数申请的内存,free函数的参数要么是NULL,要么是用malloc函数申请成功的一块内存的地址,当调用完free函数时,申请成功的内存会还给操作系统,但是这块内存的数据并没有销毁,这是就编写程序时候就要在free函数后面对这块内存里面的数据进行销毁(一般初始化成0)。这样就进一步提高了了代码的安全性。
calloc函数
calloc函数功能和malloc函数相似,但是调用calloc函数申请的内存是经过初始化的,calloc函数将申请的内存初始化成0.他们的而不同点在于calloc函数的参数包括所需元素的个数和每个元素的字节数,根据这些参数,函数可以知道开辟多大的内存。
#include<stdio.h>#include <stdlib.h>#include <string.h>int main(){int *p = calloc(10,sizeof(int ));//利用calloc函数申请40个字节的内存空间//int *p = malloc(10*sizeof(int));int i = 0;for (i=0;i<10;i++){*(p+i) = i;}for (i=0;i<10;i++){printf("%d ",*(p+i));}free(p);memset(p,0,10*sizeof(int));return 0;}
realloc函数
realloc函数适用于修改一块原来已经分配好的内存,使用这个函数可以将这块内存扩大或者缩小,在扩大的时候,realloc函数是另外开辟一快内存,同时将原来内存里面的数据进行复制到新开辟的内存里面,达到扩大内存的母的,这时值得注意的是,后面的指针就不可以指向原来开辟的那快内存的地址。在缩小内存时候,同样是另外开辟一块内存,但是在复制的时候,在多余的那块内存里面的数据就会被拿掉,其余的数据保留。
阅读全文
2 0
- 【C】简单动态内存开辟(1)!!
- 动态内存开辟(c)
- (C语言)动态内存开辟
- c语言动态开辟内存
- c语言动态开辟内存
- c语言动态内存开辟
- 【C】动态内存开辟(2)——动态内存开辟实例!!!
- c语言通讯录的简单实现文件版本(动态开辟内存)
- c语言实现通讯录(动态内存开辟)
- 通讯录动态版(动态内存开辟)
- 顺序表(动态开辟内存)
- 动态内存开辟(malloc calloc realloc)
- 动态开辟内存总结
- 动态内存开辟
- 动态内存开辟
- 动态内存开辟
- c++动态内存开辟
- 动态内存开辟
- 单元测试
- mysql的存储过程
- Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebu
- 安卓开发如何优雅的实现退出整个程序
- java读取本地txt文件
- 【C】简单动态内存开辟(1)!!
- 字符串排列
- Nginx安装教程
- 学习spring和spring mvc过程中遇到的一些问题
- Redis列表和集合类型学习
- 数据压缩 实验报告一 彩色空间转换
- 多个头文件相互包含编译问题
- python小工具--将cifar10转为图像数据
- java连接oracle