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

网站建设 从入门到精通pdf途牛网站建设的特点

网站建设 从入门到精通pdf,途牛网站建设的特点,dede网站幻灯片,wordpress scripts gzip目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前…目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前言 接上篇继续往下将。 1.3 realloc realloc是调整内存空间的函数就是用来调整内存空间的大小。参数有两个第一个参数是指向要调整空间的起始位置第二个参数是新的大小希望把原来的空间调整到多大这里就填多少直接。 下面看一个例子 #include stdio.h #include stdlib.h #include errno.h #include string.h int main() {int* p (int*)malloc(40);if (NULL p){printf(%s, strerror(errno));return 1;}//使用int i 0;for (i 0;i 10;i){*(p i) i 1;}for (i 0;i 10;i){printf(%d , *(p i));}//扩容int* pn (int*)realloc(p, 80);if (pn ! NULL){p pn;}//使用printf(\n);for (i 0;i 20;i){*(p i) i 1;}for (i 0;i 20;i){printf(%d , *(p i));}return 0; }在这个例子里面我们首先用malloc建立了一块大小为40字节的空间赋值10个整型观察输出后又用realloc将原有空间扩大到80字节最后对空间赋值了20个整型观察输出。我们来看看运行结果 可以看到realloc成功将原有的40字节空间扩大到了80字节以便我们存放20个整型数据。 在这里要注意的是在扩容时也就是使用realloc函数时我们要对新产生的指针进行判断因为有可能扩容空间太大导致开辟不成功计算机会返回空指针。所以有了上面的两行代码 int* pn (int*)realloc(p, 80);if (pn ! NULL){p pn;} 这样能保证在扩容不成功的情况下p指针还能保留原来40字节空间及其内容。 关于realloc的功能除了能对内存进行扩容以外还可以进行空间开辟只需要在传递指针参数的时候传递一个空指针即可。如果这么做那么它的功能就相当于malloc。 realloc就讲到这了。 3、常见动态内存管理错误 3.1 对空指针的解引用操作 以前一篇里面对malloc的使用代码为例 #include stdio.h #include errno.h #include stdlib.h #include string.hint main() {//动态内存开辟int* p (int*)malloc(40);if (p NULL) //判断是否开辟成功开辟失败就报错。{printf(%s\n, strerror(errno));return 1;}//使用int i 0;for (i 0;i 10;i){*(p i) i;}for (i 0;i 10;i){printf(%d , *(p i));}//空间释放free(p);p NULL;return 0; } 我们在使用之前先要对定义的p进行判断看malloc是否成功开辟空间。如果申请空间太大了超过了计算机能承担的范围就会开辟失败那malloc返回的将会是一个空指针p也就为空那我们如果不加判断直接使用p的时候就会对其进行接引用这样做就很危险。 3.2 对动态开辟的空间进行越界访问 动态开辟的空间也是有大小的假设我们用malloc开辟了一个40字节的空间那么对于整型变量最多存放10个当我们去访问第11个整型的时候就会造成越界访问。 动态内存虽然叫动态内存但它是需要我们自己去操作才能实现动态的效果的比如上面说的如果要去存放第11个整型我们只需要用到calloc对原来的内存进行加长就可以了。 3.3 对非动态开辟内存使用free释放 对于free这个函数它只能配合函数malloc、calloc、raelloc使用对于一般的指针指向的内容是不能用free释放的。原因在于malloc、calloc、realloc函数创建的内存其实和一般的变量创建的内存的位置不一样前者在堆区后者在栈区他们是有区别的。一旦用free去释放一个非动态开辟的内存时就会报错。 例如 int main() {int a 10;int* p a;free(p);p NULL;return 0; } 这样的程序一旦运行就会报错。 3.4 使用free释放一块动态内存开辟的一部分 直接上例子 #include stdio.h #include stdlib.h #include errno.h #include string.h int man() {int* p (int*)malloc(40);if (NULL p){printf(%s, strerror(errno));return 1;}//使用int i 0;for (i 0;i 10;i){*p i;p;}//释放free(p);p NULL;return 0; }像这样的程序当我们使用完p之后p将会指向malloc开辟的空间的第十个元素的位置这时候对p进行free是不行的如果要用free就要一次性将整个malloc开辟的空间进行释放指针必须是指向这块空间的首元素的。 3.5 对同一块空间的多次释放 这个比较好理解我们可能会对同一块空间多次释放这时候也是会报错的。因为第一次释放后指针指向的空间已经被回收了但是指针任然指向原来的地址它变成了一个野指针再一次释放就找不到空间去释放。但如果我们在释放空间后顺便把指针指向空指针那么再释放一次就也没有问题了。 3.6 动态内存开辟之后忘记释放 每一次用malloc、calloc、realloc开辟动态内存的时候在使用完成后一定记得对其进行释放做事情要有头有尾。如果忘记释放的话就会造成内存泄漏在整个程序结束前这块内存会一直被占用在程序结束前都无法再利用这块空间。这样的内存多了就会导致计算机性能下降 。 总结 关于动态内存管理的内容就讲到这。希望对你有所帮助。
http://www.pierceye.com/news/516033/

相关文章:

  • 政务网站建设信息嵊州网站制作
  • 我的网站突然找不到网页了seo是啥意思
  • 黑河做网站的公司平面设计现在怎么样
  • 银川网站建站中国建设银行人力资源网站
  • 建设部考试中心网站用自己的ip怎么查看dw8建设的网站
  • 九江网站建设九江商标设计网页
  • 网站建设资格预审公告附近广告设计与制作门店电话
  • 百度权重站长工具网页制作工具哪些好用
  • 关键词整站优化公司网站店招用什么软件做的
  • 租车网站模版广州市网站建设 骏域
  • 关闭网站怎么不保存我做的更改人工智能专业
  • ui中有哪些做的好看的网站简单logo设计
  • 深圳大型网站设计公司校园 网站建设 知乎
  • 西部数码网站流量怎么充优化网站界面的工具
  • 街区网站建设东阳市住房和城乡建设局网站
  • 怎样建设网站是什么网站代码制作软件
  • 成华区微信网站建设计公司加盟
  • 找个男做那个视频网站好高端网站建设公司
  • 做网站 毕业设计广东手机网页制作
  • 沈阳口碑最好的男科医院seo排名优化什么意思
  • 光谷做网站推广价格手机网站 教程
  • 泉州做网站多少钱关键词排名快照优化
  • 威海网站建设费用网站不能调用样式
  • 网站链接建设及引流营销世界500强企业中国有几家
  • 哪个网站做网络推好推广引流的10个渠道
  • 上海企业一网通办沂seo网站推广
  • 资阳网站网站建设官方网站建设公司
  • 企业网站建设一条龙服务内容如何自己免费创建网站
  • 重庆智能网站建设多少钱临海做网站
  • 创建好网站如何把浏览器合肥道路建设从哪个网站可以看到