一般的变量在定义是就要确定大小,但是有的时候不知道用户的需要,就比如说排序,你不知道用户想要给几个数排序,所以为了保险起见往往是定义一个很大的变量,而实际上用户可能只需要给5个数排序,你却int k[1024];来存放要排序的数,造成极大的浪费。这里介绍一个函数用于动态分配空间:malloc

如何使用malloc

原型

extern void *malloc(unsigned int num_bytes);

头文件

#include <stdlib.h>
#include <malloc.h>

声明

void *malloc(size_t size);

注意:这里的void*是指不确定的类型,即可以给各种类型的变量分配空间。

示例

int nSize;//要使用多大的空间
scanf("%d",&nSize);//获取要使用多大的空间//动态分配空间
int *k;
k = (int*)malloc(nSize);//分配nSize大小的空间给k
//...执行其他代码
free(k);//释放掉分配给k的空间
k = NULL;//清空

代码中之所以要在malloc前加上(int*)是因为malloc原本是void型的,要分配给一个int*型的变量,必须要进行类型转换。同样,malloc也可以分配空间给别的类型的变量,也要转换成适当类型。malloc分配的空间使用完后要清空然后用free(变量名)释放掉,否则占用的内存会越来越大。
如果申请失败
malloc也有申请空间失败的时候,那么就可以加个判断:

k = (int*)malloc(nSize);
if (k == NULL)//如果分配失败,因为如果分配成功了那k就有值。return 0;

注意
malloc 只会分配内存,不会对分配的内存进行初始化,所以分配到的内存的值是随机的。
如果分配的内存不是一个变量(如malloc(nSize))而是有一个具体的值,那么应该这么写:

k = (int*)malloc(sizeof(int) * 64);//64是要分配的空间,如果是分配给其他类型的变量,其中的sizeof的参数也要有所改变。

C语言如何动态分配空间:malloc相关推荐

  1. c语言之动态分配空间

    void method_four(){int *p ;p = (int *) malloc(10*sizeof(int)); //申请动态int类型空间for(int i = 0 ;i < 5 ...

  2. C语言中动态分配空间的数组,可以使用sizeof求其字节数吗?

    C语言中,动态分配的数组,应该注意其使用! 和一般数组名还是有很大区别的,如下: #include<stdio.h> #include<stdlib.h>int main(){ ...

  3. c语言 什么时候需要malloc动态分配内存?

    转自https://www.cnblogs.com/tomato0906/articles/7711737.html 我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么 ...

  4. c语言增加动态分配的存储空间吗,C语言 关于内存动态分配问题

    全局变量:分配到 内存的静态区. 局部变量(非静态):分配到 内存的动态区.在存储区中称为栈(stack) 临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap) 内存动态分配 得 ...

  5. C语言指针之二malloc的用法及详解

    一.为什么c语言中要有malloc malloc就是memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点,静态分配内存有如下缺点: 1.比如说,传统的一维数组,如 ...

  6. C语言-动态内存管理(malloc()、calloc()、realloc()、free())

    C语言 动态内存分配 文章目录 C语言 动态内存分配 前言 一.为什么存在动态内存分配? 二.动态内存函数的介绍 1.初识malloc()和free() 2.malloc()和free()的简单使用 ...

  7. C语言数组初始化及malloc初始化

    前言 做笔试题的时候老有些小错误,来总结一下. 数组赋值初始化的三个方式 1.{0} 初始化 例如: int nums[3] = {0}; 但是经常出现的是给定长度(变量)然后需要进行初始化,如果写成 ...

  8. C++数组动态分配空间国外玩家最关注的韩游

    2012年10月06日游戏内经济体系崩溃,多人游戏体验将更完善,游戏名称末日战车(暂译)开发商netdevil类型科幻beta测试中运行平台pc末日战车是一款将车战与角色扮演元素融合在一起的多人在线游 ...

  9. 内核空间:kmalloc vmalloc 用户空间:malloc ptmalloc

    一.地址映射流程  二.内核空间 在内核空间,通过malloc类似的两个系统调用来进行内存的分配,它们分别是kmalloc和vmalloc 1.kmalloc kmalloc用于为内核空间的直接内存映 ...

最新文章

  1. android 响应点击事件,Android响应事件onClick方法的五种实现方式小结
  2. Autodesk PowerInspect 2021中文版
  3. 如何在spring中读取properties配置文件里面的信息
  4. Java8 CountDownLatch 源码分析
  5. 读后感《我回阿里的29个月》
  6. http的302,303和307
  7. oracle安装过程掉电,Oracle数据库掉电后ORA-01172磁盘坏块解决方法
  8. cad 打开硬件加速卡_CAD卡顿?电脑带不动?几个简单实用的方法,解决CAD运行卡顿问题...
  9. 打擦边球,涨粉1700万!中国最“不正经”的官媒,比杜蕾斯还会玩
  10. From UI design to system functions and application layer
  11. 《python编程》第五章——并行系统工具(上)
  12. 1.1 echo rem cd dir命令
  13. 无线传感器网络中低功耗MAC协议—T-MAC
  14. java digester map_Tomcat7启动分析(三)Digester的使用(转载)
  15. java 百家姓_java判断姓是否合格 百家姓
  16. 华为官方翻新产品秒杀活动来袭,官方正品,7折优惠,真香!
  17. HC-SR501人体红外感应模块程序
  18. dataframe 离群值处理
  19. 处理.Dwg文件用哪种技术方案?ObjectARX,RealDWG还是Teigha(ODA)?
  20. 计算机助理职称考试成绩查询,初级成绩可以查询了!

热门文章

  1. Xp账号变成temp
  2. iPlayer惨遭破解诅咒AKAIO作者扬言要让它支持商业游戏
  3. 对于vsftp writable anonymous root问题的解决
  4. 建立个人Maven仓库
  5. 【CentOS 7Shell编程4】,shell中的case判断#180208
  6. uva 1378 - A Funny Stone Game sg博弈
  7. 一个JAVA WEB伪全栈的VUE入坑随笔,从零点零五学起
  8. 6.1、Android Studio的Android Monitor概览
  9. 学习nodejs之hello world
  10. QT5(一):HelloWord