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

王串场街网站建设公司wordpress博客导航

王串场街网站建设公司,wordpress博客导航,wordpress idc主题,电脑外设网站建设论文一、动态分配内存的概述 在数组一章中#xff0c;介绍过数组的长度是预先定义好的#xff0c;在整个程序中固定不变#xff0c;但是在实际的编程中#xff0c;往往会发生这种情况#xff0c;即所需的内存空间取决于实际输入的数据#xff0c;而无法预先确定 。为了解决…一、动态分配内存的概述 在数组一章中介绍过数组的长度是预先定义好的在整个程序中固定不变但是在实际的编程中往往会发生这种情况即所需的内存空间取决于实际输入的数据而无法预先确定 。为了解决上述问题语言提供了一些内存管理函数这些内存管理函数可以按需要动态的分配内存空间也可把不再使用的空间回收再次利用。 动态分配内存就是在堆区开辟空间 二、静态分配、动态分配 静态分配 1、 在程序编译或运行过程中按事先规定大小分配内存空间的分配方式。int a [10] 2、 必须事先知道所需空间的大小。 3、 分配在栈区或全局变量区一般以数组的形式。 4、 按计划分配。 动态分配 1、在程序运行过程中根据需要大小自由分配所需空间。 2、按需分配。 3、分配在堆区一般使用特定的函数进行分配。 三、动态分配函数 3.1 malloc 1 #include stdlib.h 2 void *malloc(unsigned int size); 3 功能在堆区开辟指定长度的空间并且空间是连续的 4 参数 5 size要开辟的空间的大小 6 返回值 7 成功开辟好的空间的首地址 8 失败NULL 注意 1、在调用malloc之后一定要判断一下是否申请内存成功。 2、如果多次malloc申请的内存第1次和第2次申请的内存不一定是连续的 3、使用malloc开辟空间需要保存开辟好的空间的首地址但是由于不确定空间用于做什么所以本身返回值类型为void *所以在调用函数时根据接收者的类型对其进行强制类型转换 1 #include stdio.h 2 #include stdlib.h 3 4 char *fun() 5 { 6 //char ch[100] hello world; 7 8 //静态全局区的空间只要开辟好除非程序结束否则不会释放所以 9 //如果是临时使用不建议使用静态全局区的空间 10 //static char ch[100] hello world; 11 12 //堆区开辟空间手动申请手动释放更加灵活 13 //使用malloc函数的时候一般要进行强转 14 char *str (char *)malloc(100 * sizeof(char)); 15 str[0] h; 16 str[1] e; 17 str[2] l; 18 str[3] l; 19 str[4] o; 20 str[5] \0; 21 22 return str; 23 } 24 25 int main(int argc, char *argv[]) 26 { 27 char *p; 28 p fun(); 29 printf(p %s\n, p); 30 31 return 0; 32 } 3.2 free 1 #include stdlib.h2 void free(void *ptr) 3 功能释放堆区的空间 4 参数 5 ptr开辟后使用完毕的堆区的空间的首地址 6 返回值 7 无 注意 free函数只能释放堆区的空间其他区域的空间无法使用free free释放空间必须释放malloc或者calloc或者realloc的返回值对应的空间不能说只释放一部分。 free(p); 注意当free后因为没有给p赋值所以p还是指向原先动态申请的内存。但是内存已经不能再用了p变成野指针了所以一般为了放置野指针会free完毕之后对p赋为NULL。 一块动态申请的内存只能free一次不能多次free 。 3.3 calloc 1 #include stdlib.h 2 void * calloc(size_t nmemb,size_t size); 3 功能在堆区申请指定大小的空间 4 参数 5 nmemb要申请的空间的块数 6 size每块的字节数 7 返回值 8 成功申请空间的首地址 9 失败NULL 注意 malloc和calloc函数都是用来申请内存的。 区别 1) 函数的名字不一样 2) 参数的个数不一样 3) malloc申请的内存内存中存放的内容是随机的不确定的 而calloc函数申请的内存中的内容为0 例如 char *p(char *)calloc(3,100);在堆中申请了3块每块大小为100个字节即300个字节连续的区域。 3.4 realloc 1 #include stdlib.h 2 void* realloc(void *s,unsigned int newsize); 3 功能在原本申请好的堆区空间的基础上重新申请内存新的空间大小为函数的第二个参数 4 如果原本申请好的空间的后面不足以增加指定的大小系统会重新找一个足够大的位 5 置开辟指定的空间然后将原本空间中的数据拷贝过来然后释放原本的空间 6 如果newsize比原先的内存小则会释放原先内存的后面的存储空间 7 只留前面的newsize个字节 8 参数 9 s原本开辟好的空间的首地址 10 newsize重新开辟的空间的大小 11 返回值 12 新的空间的首地址 增加空间 1 char *p; 2 p(char *)malloc(100) 3 //想在100个字节后面追加50个字节 4 p(char *)realloc(p,150);//p指向的内存的新的大小为150个字节 减少空间 1 char *p; 2 p(char *)malloc(100) 3 //想重新申请内存,新的大小为50个字节4 p(char *)realloc(p,50);//p指向的内存的新的大小为50个字节,100个字节的后50个字节的存储空间就被释放了 注意:malloc calloc relloc 动态申请的内存只有在free或程序结束的时候才释放。 四、内存泄漏 内存泄露的概念 申请的内存首地址丢了找不了再也没法使用了也没法释放了这块内存就被泄露了。 内存泄漏案例1 1 int main() 2 { 3 char *p; 4 p(char *)malloc(100); 5 //接下来可以用p指向的内存了 6 7 phello world;//p指向别的地方了保存字符串常量的首地址 8 9 //从此以后再也找不到你申请的100个字节了。则动态申请的100个字节就被泄露了 10 11 return 0; 12 } 内存泄漏案例2 1 void fun() 2 { 3 char *p; 4 p(char *)malloc(100); 5 //接下来可以用p指向的内存了 6 ... 7 } 8 9 int main() 10 { 11 //每调用一次fun泄露100个字节 12 fun(); 13 fun();14 return 0; 15 } 解决方式1 1 void fun() 2 { 3 char *p; 4 p(char *)malloc(100); 5 //接下来可以用p指向的内存了 6 ... 7 free(p); 8 } 9 10 int main() 11 { 12 fun(); 13 fun(); 14 return 0; 15 } 解决方式2 1 char * fun() 2 { 3 char *p; 4 p(char *)malloc(100); 5 //接下来可以用p指向的内存了 6 ... 7 return p; 8 } 9 10 int main() 11 { 12 char *q; 13 qfun(); 14 //可以通过q使用 动态申请的100个字节的内存了 15 //记得释放 16 free(q); 17 //防止野指针 18 q NULL;19 20 return 0; 21 } 总结申请的内存一定不要把首地址给丢了在不用的时候一定要释放内存。
http://www.pierceye.com/news/890427/

相关文章:

  • 兰州需要做网站的公司有哪些做词云的网站
  • 红酒公司网站建设模板6841如何通过网站获取qq
  • 写一张营销型网站页面多长时间微动漫怎么制作
  • 网站架构设计师月薪多少柳州团购网站建设
  • 深圳宝安沙井网站建设网络营销推广主要做什么?有哪些方法和技巧?
  • 图书馆门户网站建设的意义开票 网站建设
  • 如何用家用电脑做网站wordpress的伪静态
  • 东营市城市和建设管理局网站网络基础知识点
  • 怎么制作网站链接转发视频网页游戏开服表怎么取消
  • 360网站seo怎么做北京商场关闭通知
  • 连云港建设公司网站工程承包信息
  • 互动网站制作建设医院网站服务
  • 用asp做网站span增城高端网站建设
  • 数据交易网站开发网站流量超
  • 做短视频网站用哪家cms湖州高端网站设计
  • 做肝病科网站张家港高端网站制作
  • 深圳外网站建设网站的策划分析
  • 电商网站建设机构移动通网站建设
  • 网站内容不被收录企业网站制作的市场
  • 个人网站 jsp 域名空间电商线上推广
  • 网站开发实战视频教程西安网站建设定
  • 有没有99块钱做网站邢台做网站的公司哪家好?
  • 物流网站设计与实现制作公司内部募捐网站
  • 新西兰注册公司做网站局域网网站
  • 做外贸要开通哪个网站网站建设模板
  • 广州专业做网站的科技公司维度网络做网站
  • l建设银行网站怎么注册网站
  • 网站设计多少钱wordpress调用菜单代码
  • 成都p2p网站建设手机网站和app有什么区别
  • 人像摄影作品网站怎么做多个网站单点登录