C/C++之动态分配内存
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++之动态分配内存相关推荐
- 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )
文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...
- 二维数组动态分配内存
二维数组动态分配内存 C 二维数组动态分配和释放 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char ...
- 静态分配内存和动态分配内存
首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐.动态分配内存与静态分配内存的区别: 1) 静态内存分配是在编译时完成的 ...
- CC++动态分配内存(手动分配内存)三种方式
1. malloc函数 函数原型:void *malloc(unsigned int size) 函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以 ...
- c语言分配内存空间方法,C语言之动态分配内存空间
动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...
- C 结构体嵌套一级指针 二级指针 动态分配内存
https://blog.csdn.net/xielinhua88/article/details/51364623 点击打开链接 #define _CRT_SECURE_NO_WARNINGS #i ...
- hyperv动态内存Linux,Linux 之动态分配内存方式
(1)malloc/free 函数 malloc()函数和free()函数是在堆中申请或释放内存空间的,其函数声明如下: #include extern void* malloc(size_t _si ...
- (篇二)C语言动态分配内存、计算π的值
文章目录 一.动态分配内存 二.猴子吃桃问题 三.两种计算π的值 四.计算指定年月有几天 本篇是接着分享一些有趣的C语言实例,其实学习C语言这类结构化语言是非常锻炼逻辑思维的,也可以让我们对编程语言有 ...
- C++走向远洋——43(人数不定的工资类,动态分配内存与释放)
*/* Copyright (c) 2016,烟台大学计算机与控制工程学院* All rights reserved.* 文件名:text.cpp* 作者:常轩* 微信公众号:Worldhello* ...
最新文章
- ListView 异步更新出现问题的解决(Handler)
- response.redirect 正在中止线程
- Intel daal4py demo运行过程
- LeetCode-77-Combinations
- eb8000软件怎样上传_百度网盘如何免费上传超过4G的文件?BitComet来帮你!
- 这个中秋,来点不一样~
- SAP CRM 订单抬头文本的可编辑性讨论
- XML基础——extensible markup language
- java cookbook 3_CookBook/Java核心/3-Java反射.md at master · zhgdbut/CookBook · GitHub
- mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...
- jquery on()方法绑定多个选择器,多个事件
- 山水功放与音箱接线图_功放接线示意图(图文详解)
- 在硅谷初创公司怎么找投资人
- 4k纸是几厘米乘几厘米_4k素描纸是多大? 是几乘几的?
- LeetCode热题100使用摩尔投票法的题目整理(待更)
- 考研要求过英语四六级!这些大学有明确规定!
- Python Open3D点云配准点对点,点对面ICP(Iterative Closest Point)
- bzoj 1127 [POI2008]KUP——思路(悬线法)
- 相邻数对和Python学习---多维缩减
- 基于深度强化学习的电子商务平台动态定价