当前位置: 首页 > news >正文

做淘宝客的网站北京新网数码信息技术有限公司

做淘宝客的网站,北京新网数码信息技术有限公司,wordpress手机网址导航,wordpress同步发帖文章目录 #x1f680;前言#x1f680;管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 #x1f680;在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一… 文章目录 前言管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一块动态开辟内存的一部分✈️对同一块动态内存多次释放✈️动态开辟内存忘记释放内存泄漏 前言 铁子们好啊今天阿辉给大家讲一下C语言里面特别重要的一块知识——动态内存管理为什么说它重要呢相信大家在使用数组时都遇到过数字开辟空间太大或者太小的情况这是很尴尬的因为数组空间一旦确定就难以扩大或者缩小。而今天的动态内存管理将帮我们很好的解决这一窘境。话不多说开始咱们今天的学习吧 管理动态内存的函数 动态内存的管理其实也就分为两块 空间的开辟和扩容空间的释放 而要做到以上两点我们要引入几个重要的管理动态内存的函数 动态内存的开辟和释放都是在堆区上 ✈️malloc函数 malloc函数是用来开辟空间的如何使用呢下面是它的声明 void* malloc(size_t size);关于malloc函数的注意事项 size表示malloc函数所开辟空间的大小单位是字节maloc函数对于开辟空间存放何种类型的数据并不关心返回值是void*类型malloc开辟空间成功则返回这块空间的起始位置的地址若开辟空间失败则返回空指针NULL给malloc传入的参数为0时这种行为是C语言标准未定义的取决于编译器由malloc函数开辟的空间里面的内容是随机的 具体使用 int mian() {int* p (int*)malloc(sizeof(int) * 10);//开辟10*4个字节的空间返回值强转为int*if (p NULL)//判断动态内存是否开辟成功{printf(malloc 开辟空间失败\n);//开辟失败返回调试语句就是让程序员知道哪错了return 1;//开辟失败直接返回}//对动态开辟内存的进一步使用//这玩意其实就是个数组有了首元素地址不就是当成数组来玩嘛for (int i 0; i 10; i)//十个元素初始化成0~9{p[i] i;//这玩意与*(pi) i等价不懂得可以看阿辉之前关于指针的文章}return 0; }关于malloc函数开辟的空间它是一块连续的空间直接当成数组使用一点毛病没有 它与数组最大的区别在于malloc开辟的空间是在堆区上的而数组是在栈区上的。 而堆区上申请的空间须有程序员自己手动释放JavaPython有垃圾回收机制否则将造成内存泄漏。其实就是你从我这拿了空间去用不用了就还给我别占着茅坑不拉屎你不用别人也用不了。对于堆区申请的空间的释放这里要引入下面这个新的函数 ✈️free函数 C语言提供了一个函数free专门用来做动态内存的释放和回收的函数声明如下 void free(void* ptr);对于free函数使用时的注意事项 对于传给free的参数必须是指向动态开辟内存也就是是堆区开辟的空间的起始地址的指针若传给free的参数是空指针NULLfree函数则什么也不干free只会释放传入的指针指向的空间并不会给传入指针置空这会很危险空间你都还给操作系统了你这个指针还指向那里这个指针很野得治所以free完指针我们要置空 int mian() {//开辟动态空间int* p (int*)malloc(sizeof(int) * 10);//判断动态内存是否开辟成功if (p NULL){printf(malloc 开辟空间失败\n);return 1;}/*对动态开辟空间的使用*///不用啦释放空间free(p);p NULL;return 0; }这段代码就是动态内存的使用的基本模式先开辟空间然后判断是否开辟成功接着使用这块空间最后不用了把这块空间释放掉 ✈️calloc函数 C语言中还提供了calloc函数同样是进行动态内存分配的函数声明如下 void* calloc(size_t num, size_t size);calloc与malloc仅有两点不同 使用上calloc函数需要两个参数开辟空间为num个大小为size个字节的空间calloc函数开辟的空间会把每个字节全部初始化为0 int main() {int* p (int*)calloc(10, sizeof(int));if (p NULL)//判断空间是否开辟成功{printf(calloc开辟空间失败\n);return 1;}for (int i 0; i 10; i)//打印动态内存中的元素{printf(%d , p[i]);}free(p);//空间释放p NULL;//指针置空return 0; }输出 0 0 0 0 0 0 0 0 0 0 //十个0✈️realloc函数 铁子们估计有点不买账了说好的动态内存分配讲了这么多也没有体现动态俩字。铁子们别急realloc函数才是今天的重头戏 C语言提供realloc函数用来使动态内存的使用更加灵活之前开辟的空间太大或者太小都可以灵活的调整重新分配空间大小 realloc函数的函数声明 void* realloc(void* ptr,size_t size);realloc函数在使用时要注意下面这几点 ptr是要调整的空间的起始地址ptr得是动态内存开辟的地址若是ptr为空指针realloc函数将与malloc函数的实现一样 size是realloc函数调整大小后的内存空间大小 realloc函数的返回值是空间调整后的起始地址空间开辟失败返回空指针 realloc函数扩容的空间里面的值并未被初始化是随机值 这个函数在调整原内存空间大小的基础上还会将原来内存中的数据移动到新的空间 对于realloc函数调整空间有了两种情况 情况一原有空间后有足够空间 情况二原有空间后无足够空间原有空间将被释放掉重新找一块空间 例子 int main() {int* p (int*)malloc(5 * sizeof(int));//先用malloc申请5个整型大小的内存空间if (p NULL)//判断是否开辟成功{printf(malloc开辟空间失败\n);return 1;}int i 0;for (i 0; i 5; i){*(p i) 1;//把5个整型全部初始化为1}//不够用了要再增加5个整型int* ptr (int*)realloc(p, 10 * sizeof(int));if (ptr NULL){printf(realloc开辟空间失败\n);return 1;}p ptr;//空间扩容成功将ptr的地址赋给pptr NULL;//ptr置空for (i 0; i 10; i){printf(%d , *(p i));}free(p);p NULL;return 0; }上述使用realloc对空间做调整时一定要新创建一个变量来接收realloc的返回值因为如果使用指向原空间的起始地址的指针p来接收一旦realloc开辟空间失败p将被赋值成NULL将找不到原来空间造成内存泄漏 在使用动态内存函数时的常见错误 ✈️对NULL指针的解引用 void test() {int* p (int*)malloc(INT_MAX / 4);*p 20;//如果p的值是NULL就会有问题free(p); }✈️ 对动态开辟空间的越界访问 void test() {int i 0;int* p (int*)malloc(10 * sizeof(int));if (NULL p){exit(EXIT_FAILURE);}for (i 0; i 10; i){*(p i) i;//当i是10的时候越界访问}free(p); }✈️对非动态开辟内存使用free释放 void test() {int a 10;int *p a;free(p);//error——不能对非动态内存进行释放 }✈️使用free释放一块动态开辟内存的一部分 void test() {int *p (int *)malloc(100);p;free(p);//p不再指向动态内存的起始位置 }✈️对同一块动态内存多次释放 void test() {int *p (int *)malloc(100);free(p);free(p);//重复释放 }✈️动态开辟内存忘记释放内存泄漏 void test() {int *p (int *)malloc(100);if(NULL ! p){*p 20;} } int main() {test();while(1); }对于动态开辟的内存一定要记得释放否则将造成内存泄漏 如果觉得文章对你有帮助的话还请点赞关注收藏支持博主如有不足还请指点博主及时改正感谢大家支持
http://www.w-s-a.com/news/634528/

相关文章:

  • 网站做seo第一步h5制作公司
  • 软件外包产业网络优化工程师是干嘛的
  • 怎么用服务器做局域网网站河西网站建设
  • 工业企业网站建设企业门户网站解决方案
  • 网站运营与管理论文网上商城都有哪些
  • 常德网站制作建设毕设电商网站设计
  • 西安企业模板建站福州+网站建设+医疗
  • 邹城市住房和建设局网站仙居网站建设贴吧
  • 为什么要用CGI做网站网站手机优化显示
  • 做袜子娃娃的网站做网站要学的东西
  • 类qq留言网站建设企业做网站公司
  • 如何查到网站建设三足鼎立小程序开发公司
  • 交互网站怎么做的wordpress ssl 错位
  • 公司宣传 如何做公司网站郑州做网站那
  • 衡阳市城乡建设协会官方网站免费游戏网站模板
  • 小程序怎么做优惠券网站合肥建站网站平台
  • 民制作网站价格株洲企业seo优化
  • 网站建设 岗位职责网站建设百度索引
  • 网站建设的内容下拉网站导航用ps怎么做
  • 怎样做p2p网站海口免费自助建站模板
  • 给企业建设网站的流程图wordpress 添加子菜单
  • 企业网站带新闻发布功能的建站皋兰县建设局网站
  • 国内外做gif的网站wordpress数据库教程
  • 成都建站平台自己做一个网站需要多少钱
  • 景区旅游网站平台建设公司企业网站源码
  • 免费高清网站推荐喂来苏州网络科技有限公司
  • php做的大型网站有哪些备案博客域名做视频网站会怎么样
  • 去哪网站备案吗昭通网站建设
  • flash企业网站源码建筑材料采购网站
  • 网站可以换虚拟主机吗部门做网站优点