动态内存知识总结
来源:互联网 发布:淘宝幸福狐狸是正品吗 编辑:程序博客网 时间:2024/06/13 23:15
malloc()函数
函数原型:extern void *malloc(unsigned int num_bytes);
函数功能:分配长度为num_bytes字节的内存块。
函数的使用:
①该函数接受一个参数:所需的内存字节数。
②malloc()函数会找到合适的匿名空闲内存,并且返回动态内存块的首字节地址。
③因此,可以把该地址赋给一个指针变量,并且用指针访问这块内存。
④注意的是:其返回的指针为void类型的指针,所以使用时根据自己的需求而进行类型转换。
⑤通常,malloc()函数要与free()配套使用,free()函数的参数是malloc()函数返回的地址,该函数释放malloc()分配的内存。
代码示范如下:
#include<stdio.h>#include<stdlib.h> //为malloc()和free()提供原型int main(){ int *p; p = (int *)malloc(10*sizeof(int)); if(p != NULL) { int i = 0; for(i=0; i<10; i++) { *(p+i) = i; printf("%d\n", *(p+i)); } } else { printf("没有足够的内存!"); return 0; } free(p); p = NULL;//释放完成后,P是个野指针,养成好习惯对让p指向空 return 0;}
realloc()函数
函数原型:extern void *realloc(void *mem_address, unsigned int newsize);
函数功能:判断指针是否有足够的空间,如果有,扩大men_address指向的地址,并将men_address返回,
如果空间不够,则按照newsize大小分配空间,并将原数据拷贝到新的空间,自动释放原空间,反回新的地址。
代码示范如下:
#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; int *p; int *p1; p = (int *)malloc(10*sizeof(int)); if(p != NULL) { for(i=0; i<10; i++) { *(p+i) = i; printf("%d\n", *(p+i)); } } p1 = p; p1 = (int *)realloc(p,10*sizeof(int)); if(p1 != NULL) { for(i=0; i<10; i++) { *(p1+i) = i; printf("%d\n", *(p1+i)); } } else { printf("没有足够的内存!"); return 0; } free(p1); p1 = NULL; return 0;}
calloc()函数
函数原型:void *calloc(size_tn, size_t size);
函数功能:和malloc()函数类似,但是它把所有位都设初始化为0
动态内存使用注意事项:
①对空指针的解引用
②对动态内存的越界访问
③释放非动态开辟内存
④释放动态内存的一部分
⑤对已经释放的内存再次访问
⑥对同一块内存的多次释放
最后,为了您和他人的安全,请务必使用free()!!!
请务必使用free()!!!
务必使用free()!!
必使用free()!!!
使用free()!!!
用free()!!!
free()!!!**
- 动态内存知识总结
- linux内存知识总结
- 动态开辟内存总结
- 【算法知识总结】动态规划
- c++动态内存管理相关知识
- c++动态内存管理的相关知识
- 动态内存的应用总结。
- c/c++内存释放知识总结
- c/c++内存释放知识总结
- c/c++内存释放知识总结
- c/c++内存释放知识总结
- c/c++内存释放知识总结
- c/c++内存释放知识总结
- c/c++内存释放知识总结
- jvm内存相关的知识总结
- java虚拟机使用内存知识总结
- c/c++内存释放知识总结
- RTTI、反射、动态代理部分知识总结
- HDU3986
- 数据结构--递归练习
- python 七牛的直播实时截图
- Android学习笔记
- 学习总结 求某年某月某日之后第N天日期的解法
- 动态内存知识总结
- ECMAScript 6 入门笔记(七)Symbol,set和map
- 我眼中的权限系统
- 【Boolan】C++面向对象编程培训第一周笔记
- js容易被忽略的内容(一)
- 详解android.media
- 图像尺寸变化-图像缩放
- python 打开有中文的文件时报错
- PCL1.8.0+VS2013配置教程