C语言学习:malloc()函数
函数声明:
void *malloc(size_t size)
头文件:
#include <stdio.h>
函数描述:
- 分配所需的内存空间,并返回一个指向它的指针。
参数:
- size – 内存块的大小,以字节为单位。
返回值:
- 该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。
实例:
下面的实例演示了 malloc() 函数的用法。
#include <stdio.h>
#include <stdlib.h>void update_value(int* p){*p = 100;
}int main()
{//在栈上面分配变量a 占4个字节int a = 10;//申请类型是int内存空间;占4个字节;p指针指向该4个字节的内存空间 int *p = (int*)malloc(sizeof(int));//p变量也占4字节;所以sizeof(p)=8个字节//赋值p只指向的动态空间为50*p = 50;printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));free(p);//修改p指向的内存中的数据printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));update_value(p);printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));return(0);
}
注:当内存不再使用的时候,应使用free()函数将内存块释放掉。
void*:表示未确定类型的指针,C/C++规定void*
可以强转为任何其他类型的指针,关于void还有一种说法就是其他任何类型都可以直接赋值给它,无需进行强转,但是反过来不可以。
malloc:分配的内存大小至少为参数所指定的字节数。
malloc
的返回值是一个指针,指向一段可用内存的起始位置,指向一段可用内存的起始地址,多次调用malloc
所分配的地址不能有重叠部分,除非某次malloc所分配的地址被释放掉malloc应该尽快完成内存分配并返回(不能使用NP-hard的内存分配算法)实现malloc时应同时实现内存大小调整和内存释放函数(realloc和free)
malloc
和free
是配对的,如果申请后不释放就是内存泄露,如果无故释放那就是什么也没做,释放只能释放一次,如果一块空间释放两次或者两次以上会出现错误(但是释放空指针例外,释放空指针也等于什么也没做,所以释放多少次都是可以的。)
C语言学习:malloc()函数相关推荐
- 黑马程序员——c语言学习心得——函数传递二维数组
黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化. 变量 ...
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- c语言:malloc函数的简介
文章目录 一.为什么需要malloc函数? 二.如何使用malloc函数? 三.用malloc函数自定义数组长度 一.为什么需要malloc函数? 用于解决传统数组以下缺点. ①传统数组的长度必须要事 ...
- 函数的返回值可以不用赋值_C语言学习|函数的应用《一》
C语言为程序的结构提供了函数和模块 一.函数的定义与使用 <编程之道>中写道:"一个程序应该是灵活自由的.它的子过程就像串在一根线子上的珍珠."子过程在C语言中被称为& ...
- C语言学习笔记--函数
1. C 语言中的函数 (1)函数的由来: 程序 = 数据 + 算法→C 程序 = 数据 + 函数 (2)模块化程序设计 (3)C 语言中的模块 2. 面向过程的程序设计 (1)面向过程是一种以过程为 ...
- 关于C语言的malloc函数以及内存泄漏的问题
malloc函数 malloc函数的原型: (void *)malloc(int size) malloc函数的返回值是一个void类型的指针,参数为int类型的数据,即申请分配的内存大小,单位是字节 ...
- c语言之 malloc函数详解 在堆中动态分配内存malloc和new的区别
一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc ...
- C语言学习笔记--函数与指针
1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...
- c语言的malloc函数为什么会出现没有定义,屡次使用malloc函数为什么不行
多次使用malloc函数为什么不行? 编了一个程序, 其中要用到很多很多数组来进行大型的矩阵计算(使用分治法递归实现,所以中间数据特别多). 定义成静态数组已经不够用了(经测试只能支持到几百*几百的数 ...
- c语言学习--关于函数的参数传递(汇编和可执行文件)
簇: 数据存储在硬盘的时候都是以簇位单位,所以无论文件大小是多少,除非正好是簇大小的倍数,否则文件所占用的最后一个簇或多或少都会产生一些剩余的空间,且这些空间又不能给其它文件使用,即使这个文件只有0字 ...
最新文章
- mac os 系统密码正确的 但是进不了系统
- PMCAFF | 别学东学西了,先建立自己的知识体系吧
- 开源大数据周刊-第15期
- 【计算机网络】物理层传输介质
- Linux操作Oracle(10)——plsql配置Oracle客户端方法【Oracle客户端安装、资源下载】详细教程
- Two Bases CodeForces - 602A (BigInteger c++long long也可以)
- 三大技术要素为互联网金融2.0保驾护航
- 匿名对象和类名为数据类型(java)
- DirEqual for Mac(文件夹快速比较工具)
- TaskPaper教程——如何安装运行脚本?
- 国军标要求的产品“六性”到底是什么?
- 批处理重置IE、批处理清理浏览器缓存、默认以管理员权限运行批处理
- WinDbg 定位句柄泄漏问题
- vue3学习笔记一:createApp, ref, reactive, onMounted,computed
- Android 启动过程介绍
- [Java练习] 学生查询系统
- RedisTemplate设置redis的key时出现\xac\xed\x00\x05t\x00\x0f前缀
- word文档变成0字节_如何恢复0字节的word文档【五个步骤免费恢复】
- day10-字符串作业-复写
- 快速入门JAVA单元测试——mock
热门文章
- Apsara Clouder专项技能认证:实现调用API接口
- 怎么抓取屏幕截图计算机考试时间,定时抓屏快照(电脑截屏工具)V4.8 最新版
- LeetCode每日打卡 - 汉明距离总和
- MySql 、Oracle 获取表结构和字段信息
- 【HRBUST - 1623】Relation(思维模拟,拆解字符串)
- 【HDU - 6185】Covering(矩阵快速幂优化二维dp,高斯消元,轮廓线dp打表)
- 【POJ - 2533】Longest Ordered Subsequence(四种方法解决最长上升子序列 含二分优化版本)
- 吴恩达机器学习作业(4):正则化逻辑回归
- div内容居中和布局居中样式总结
- Java基础部分快速复习(以前复习的时候放在自己的新浪博客上)