malloc
来源:互联网 发布:找谱子的软件 编辑:程序博客网 时间:2024/06/05 18:43
malloc(memory allocation 动态分配内存)
在Ubuntu下查看malloc的用法:
(1)malloc的头文件:# include < stdlib.h >
(2)malloc函数如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。因此我们需要判断malloc申请是否成功!
(3)malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。因此我们需要对这块内存进行清空处理
堆内存的申请
堆内存也是内存的一种,需要程序员自己手动申请malloc,手动释放
编译器不会自动回收,申请的内存伴随整个程序。
堆内存的释放
整个程序结束,会自动释放堆内存。
申请一次,释放一次,不可以多次释放。
释放的堆内存必须是这块内存的首地址。
malloc调用实例(动态数组的输入)
#include<stdio.h>#include<string.h>#include<stdlib.h>int set_value(int *p, int lenth){ int i = 0; printf("请输入各个元素的值:\n"); for(i=0;i<lenth;i++) { scanf("%d",&p[i]); }} int main(void){ int a = 0; printf("请输入数组的元素个数:\n"); scanf("%d",&a); //malloc的返回值是void*类型的,因为它并不知道你要存放什么样的数据。 //申请一定大小的堆内存,堆内存中存放的数据是int型的,所以强制类型转化! int *p = (int *)malloc(a*sizeof(int)); //判断malloc是否申请成功 if(NULL == p) { printf("malloc failed"); return -1; } //清空申请到的这个内存 memset(p,0,a*sizeof(int)); //清空就可以使用这块内存了! set_value(p,a); //释放内存 free(p); //避免野指针的出现,将指针写0 p = NULL; return 0; }
malloc
(1)申请(申请的大小,存放的数据类型(强制类型转化))
(2)判断是否申请成功
(3)申请成功之后对内存进行清空
(4)使用这块内存
(5)free释放内存(虽然这个内存会在这个进程结束自动释放,但是我们现在写的main函数比较短,如果是一直运行的程序,程序员忘记释放内存,会导致内存泄漏。)
(6)避免野指针的出现,我们对指针进行写0的操作。
c++下面的new和del是成对使用的
new是一个运算符,跟sizeof是一样的。
new int
创建一个int类型的数据
new int(0)
创建一个初始化的数据
new int【10】
创建10个int数据的数组
new string【10】
创建10个字符串类型的数据
malloc和new的区别
(1)是否需要指定要分配的内存的大小
new返回指定类型的指针,并自动计算大小,例如:下面的new返回的指针类型为int *,分配的内存空间的大小为sizeof(int)。
int *p = new int
malloc则必须由我们计算分配的字节数,并且在返回后还要把指针强制转换为实际的类型
int * p = (int *)malloc(sizeof(int))
(2)是否会对分配的内存进行初始化
malloc只负责分配内存,并不能对分配的内存进行初始化,但是new可以对分配的内存进行初始化。
(3)malloc(free)是函数 而 new(del)是运算符
- malloc
- malloc
- malloc()
- malloc
- malloc
- Malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- malloc
- 将单向链表按某个值划分成左边小、中间相等、右边大的形式 Python 版
- Qt-序列号生成器
- MYSQL 什么时候用单列索引?什么使用用联合索引?(收集)
- 算法期中——最小差
- 命令模式
- malloc
- CodeForces 148E(动态规划)
- 最近需要完成的东西
- Java设计模式学习—适配器模式
- 13.Linux进程控制编程
- 14.Python入门之异常处理
- Codeforces Round #449 (Div. 1) E. Welcome home, Chtholly
- Matlab R2008a破解
- 项目问题总结