malloc函数负责向计算机申请确定大小的内存空间。free函数负责释放malloc的申请空间。(1)函数原型void free(void *_Memory);void * malloc(size_t _Size)(2)头文件stdlib.h(3)功能malloc负责申请size_t _S...
malloc函数负责向计算机申请确定大小的内存空间。
free函数负责释放malloc的申请空间。
(1)函数原型
void free(void *_Memory);
void * malloc(size_t _Size)
(2)头文件
stdlib.h
(3)功能
malloc负责申请size_t _Size大小的内存空间,并且把所申请得到的内存空间首地址,
作为void*返回。用户往往必须把void*强制转换。
(注意:进程不会自动释放malloc申请的变量,无论是在主函数还是子函数,都不会)
正因为malloc申请内存不会自动释放,所以使用malloc必须配套free主动释放,否则申请
的内存空间将会一直存在到进程被结束。如果申请过多,会导致内存溢出
(4)基础实例代码
char* ptc = (char*)malloc(30*sizeof(char));
int* pti = (int*)malloc(30*sizeof(int));
for(int i=0;i<30;++i)
{
printf("%d ",ptc[i]);//用来依次输出每个字符
}
for(int i=0;i<30;++i)
{
printf("%d ",pti[i]);
}p
free(ptc);
free(pti);
(5)输出情况

(6)基础实例代码2:
char* ptc = (char*)malloc(30*sizeof(char));
int* pti = (int*)malloc(10*sizeof(int));
char a[]="zobol's Magic Cabin";
int b[10]={1,2,3,4,5,6,7,8,9,10};
strcpy(ptc,a);//字符串复制
memcpy(pti,b,10*sizeof(int)); //数组内存复制,注意第三个参数是以字节为单位
printf("%s\n",ptc);//输出
for(int i=0;i<10;++i)
{
printf("%d ",pti[i]);
}
(7)输出情况:

(8)问题1:如果不用free释放malloc申请的内存,会发生什么事?
回答:那你只需要很简短的代码就可以榨干你的电脑的内存。
for(int i=0;i<99999999;++i)
{
malloc(300000);
}
(9)如果不用指针接住malloc申请的内存空间的地址,会发生什么事情?
回答:malloc已经向计算机申请了空间了,但是你没有保存返回的空间内存地址,那就等于白占用看计算机空间。
(10)在子函数内部malloc申请的空间,会不会随着子函数结束而释放?
回答:不会!C语言给予了程序员绝对的自由,malloc申请的空间,除了程序员主动调用malloc以外,绝对不会被程序自动释放。
如果有帮助,欢迎关注我的个人公众号:zobol的魔法藏书室
本文标题为:C语言学习之我见-malloc和free内存申请及释放函数
基础教程推荐
- 利用QT设计秒表功能 2023-05-30
- C语言的三种条件判断语句你都了解吗 2023-03-05
- Qt数据库应用之实现通用数据库请求 2023-03-18
- VisualStudio2010安装教程 2023-01-05
- g++: const 丢弃限定符 2022-10-07
- 05-C语言进阶——动态内存管理 2023-11-20
- C语言植物大战数据结构二叉树递归 2023-04-09
- 纯C++代码详解二叉树相关操作 2023-05-15
- C语言数组长度的计算方法实例总结(sizeof与strlen) 2023-04-26
- character-encoding – Linux中最常见的C语言编码(和Unix?) 2023-11-21
