博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
malloc函数的用法
阅读量:5308 次
发布时间:2019-06-14

本文共 1207 字,大约阅读时间需要 4 分钟。

 

 

 

 p=(int*)malloc(sizeof(int)*(n+1))

malloc 是内存分配 分配的空间以字节为单位 sizeof(int)*(n+1) 是求一个字节数的过程 sizeof(int)就是int类型的字节数,再*(n+1),其实就是连续的n+1个int型数的空间所含的字节数 前面二者合起来就是分配了大小为n+1个int型的空间所含的字节数 此时(int*)是强制转化为int型的指针,所以p就是一个指向这连续n+1个int的int指针。
这种分配内存的方式是C语言中实现的,为什么不直接指明字节数, 而用sizeof(int)这种运算是因为对于不同的计算机,对于int的分配空间不一定相同,这样有一定的移值性。
sizeof就是空间大小,malloc就是分配空间的意思,int整形 int* 将malloc分配的内存空间强制转换为int型的指针。 ( malloc申请的内存都是空类型 也就是 void * 但是, 这个内存取决于你怎么去使用,所以,将其转换为相应的类型是必要的! malloc返回的是void* ) 指针里边存放的只有地址而已 没有指向的内存大小  比如你可以把char *型的指针强制转换成int * 那么引用的时候就会取4个字节的内存 (原来只会取一个字节,这个就是强制转换的意义了吧) (int *)malloc(sizeof(int)) sizeof(int)=4 int占4个字节 (int *)malloc(sizeof(int *)) sizeof(int *)=4 指针占4个字节 (char *)malloc(sizeof(char)) sizeof(char)=1 char占1个字节 (char *)malloc(sizeof(char *)) sizeof(char *)=4  指针占4个字节 如果前面有声明char *malloc(); 那么malloc(sizeof(char))/malloc(sizeof(char *))等同于上面后2个 至于为什么要加 char * 这取决于malloc的左值, 因为malloc的左值是被声明为指向不同类型的指针, 不同类型的指针之间是不能赋值的,所以需要char * 进行强制类型转换
free(void *p)函数是用来释放程序动态申请的内存。其参数是个指针类型。 在C当中,只有当使用了动态内存申请函数malloc calloc  realloc申请内存之后,才可以使用free来释放之。释放之后就不能再使用了。 在C++中,除了上述函数之外,还有new操作之后,都要使用free函数。 切记,动态申请内存使用完后,一定要记得释放,否则会有内存泄露问题。
 

转载于:https://www.cnblogs.com/Lee-geeker/archive/2013/04/30/3051665.html

你可能感兴趣的文章
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
eclipse的调试方法的简单介绍
查看>>
加固linux
查看>>
IPSP问题
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>
Windows Phone 7你不知道的8件事
查看>>
实用拜占庭容错算法PBFT
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
七丶Python字典
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>