C/C++之动态分配内存

c语言中,一般决定了变量的类型,就自动给决定了其作用域和存储时期,系统会自动给每个变量分配内存,在变量超出作用域和存储时期后,自动释放该变量所占用的内存。

除了自动分配内存,还有一种方法,可以在程序运行时分配内存,主要的工具是 malloc()。

malloc()函数接受一个参数:所分配的字节数。malloc()分配了内存,但内存是匿名的,返回该内存块的首地址。如果要访问该内存,可以把该地址赋值给一个指针,通过指针的操作来访问。如果malloc()没有成功分配内存,将返回空指针。

malloc()运行的时候,会分配一块内存,并需要一个指针来存放该内存的地址。

double *ptd
ptd=(double *) malloc ( 30 * sizeof ( double) )

ptd[i]可以用来访问该内存块中的第 i+1 个元素。

声明数组有三种方式:

  • 声明一个数组,用常量表达式表示其维数
  • 声明一个变长数组,用变量表达式表示其维数,
  • 声明一个指针,调用malloc()

int  a[][6];int n=6;
int a[][n];int *ptd;
ptd=(int *) malloc ( n * sizeof (int) );

malloc() 分配的内存不会自动消失,要使用 free() 来释放,否则容易内存泄露。

内存分配还可以使用 calloc();

double *ptd
ptd=(double *) calloc ( 30, sizeof ( double) )

calloc 将块中的全部位置都置0,,也是使用 free() 来释放内存。

变长数组就是动态分配内存的一个实例

int n=6;
int m=6;
int p[n][m];
int ( *p )[m];
p=( int(*) [m] ) malloc( n*m*sizeof(int));

上述p均为n*m的int型数组,可以赋值:p[1][2]=1;

malloc 还经常用于创建链表:

struct a {
char c1[10];
int  i1;
sttct a *next;
}p=(struct a * )malloc (sizeof (struct a);

C/C++之动态分配内存相关推荐

  1. 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

    文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...

  2. 二维数组动态分配内存

    二维数组动态分配内存 C 二维数组动态分配和释放 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char ...

  3. 静态分配内存和动态分配内存

    首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐.动态分配内存与静态分配内存的区别: 1) 静态内存分配是在编译时完成的 ...

  4. CC++动态分配内存(手动分配内存)三种方式

    1. malloc函数 函数原型:void *malloc(unsigned int size) 函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址.  可以 ...

  5. c语言分配内存空间方法,C语言之动态分配内存空间

    动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...

  6. C 结构体嵌套一级指针 二级指针 动态分配内存

    https://blog.csdn.net/xielinhua88/article/details/51364623 点击打开链接 #define _CRT_SECURE_NO_WARNINGS #i ...

  7. hyperv动态内存Linux,Linux 之动态分配内存方式

    (1)malloc/free 函数 malloc()函数和free()函数是在堆中申请或释放内存空间的,其函数声明如下: #include extern void* malloc(size_t _si ...

  8. (篇二)C语言动态分配内存、计算π的值

    文章目录 一.动态分配内存 二.猴子吃桃问题 三.两种计算π的值 四.计算指定年月有几天 本篇是接着分享一些有趣的C语言实例,其实学习C语言这类结构化语言是非常锻炼逻辑思维的,也可以让我们对编程语言有 ...

  9. C++走向远洋——43(人数不定的工资类,动态分配内存与释放)

    */* Copyright (c) 2016,烟台大学计算机与控制工程学院* All rights reserved.* 文件名:text.cpp* 作者:常轩* 微信公众号:Worldhello* ...

最新文章

  1. ListView 异步更新出现问题的解决(Handler)
  2. response.redirect 正在中止线程
  3. Intel daal4py demo运行过程
  4. LeetCode-77-Combinations
  5. eb8000软件怎样上传_百度网盘如何免费上传超过4G的文件?BitComet来帮你!
  6. 这个中秋,来点不一样~
  7. SAP CRM 订单抬头文本的可编辑性讨论
  8. XML基础——extensible markup language
  9. java cookbook 3_CookBook/Java核心/3-Java反射.md at master · zhgdbut/CookBook · GitHub
  10. mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...
  11. jquery on()方法绑定多个选择器,多个事件
  12. 山水功放与音箱接线图_功放接线示意图(图文详解)
  13. 在硅谷初创公司怎么找投资人
  14. 4k纸是几厘米乘几厘米_4k素描纸是多大? 是几乘几的?
  15. LeetCode热题100使用摩尔投票法的题目整理(待更)
  16. 考研要求过英语四六级!这些大学有明确规定!
  17. Python Open3D点云配准点对点,点对面ICP(Iterative Closest Point)
  18. bzoj 1127 [POI2008]KUP——思路(悬线法)
  19. 相邻数对和Python学习---多维缩减
  20. 基于深度强化学习的电子商务平台动态定价

热门文章

  1. 在元素前面添加一个伪元素下边框
  2. 写给正在入坑linux系统的伙伴
  3. Linux 将文件夹下的所有文件复制到另一个文件里
  4. OAuth2.0 工作流程
  5. IOS开发之----异常处理
  6. JavaScript 入门基础 (八)
  7. 【流媒體】jrtplib—VS2010 下RTP开源协议库JRTPLIB3.9.1编译
  8. Linux上的WebSphere MQ开发快速入门
  9. POJ2570 二进制,位运算,Floyd
  10. hdu4067 费用流(混合欧拉的宽展和延伸)