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

迁西网站建设有哪些专门制作网页的软件

迁西网站建设,有哪些专门制作网页的软件,江门网页制作,dw个人网站制作教程题记#xff1a;写这篇博客要主是加深自己对错误内存的认识和总结实现算法时的一些验经和训教#xff0c;如果有错误请指出#xff0c;万分感谢。 对C/C程序员来讲#xff0c;内存管理是个不小的挑战#xff0c;绝对值得慎之又慎#xff0c;否则让由上万行代码构成的模块… 题记写这篇博客要主是加深自己对错误内存的认识和总结实现算法时的一些验经和训教如果有错误请指出万分感谢。          对C/C程序员来讲内存管理是个不小的挑战绝对值得慎之又慎否则让由上万行代码构成的模块跑起来后才出现内存崩溃是很让人痛苦的。因为崩溃的位置在时间和空间上通常是在距真正的错误源一段距离以后才表现出来。头几天线上模块因堆内存写越界1个字节引起各种诡异崩溃定位问题过程当中的折腾仍历历在目今天读到《深刻理解计算机系统》第9章-虚拟存储器发明书中总结了C程序中常见的内存操纵有关的10种典型编程错误总结的比拟全面。故作为笔记记载于此。     1. 间接引用无效指针         进程虚拟地址空间的某些地址范围可能没有映射到任何有意义的数据如果我们试图间接引用一个指向这些地址的指针则操纵系统会以Segment Fault终止进程。而且虚拟存储器的某些区域是只读的如.text或.rodata试图写这些区域会以掩护异常中止当前进程。         如从stdin读取一个int变量时scanf(%d, val)是准确用法若误写为scanf(%d, val)时val的值会被解释为一个地址并试图向该地址写数据。在最好的情况下进程立即异常中止。在最坏的情况下val的值恰好对应于虚拟存储器的某个正当的具有读/写权限的内存区域于是该内存单元会被改写而这通常会在相当长的一段时间后形成灾难性的、令人困惑的后果。     2. 读未初始化的存储器         C语言的malloc并不负责初始化申请到的内存区域因此常见的错误是假设堆存储器被初始化为0例如 int * foo(int **A, int *x, int n){int i, j;int * y (int *)Malloc(n * sizeof(int));for(i 0; i n; i) {for(j 0; j n; j){y[i] A[i][j] * x[j];}}return y;}            上述代码中错误地假设了y被初始化为0。准确的实现方式是显式将y[i]置为0或者应用calloc。     3. 栈缓冲区溢出          例如: char buf[5];sprintf(buf, %s, hello world);                 上面的代码致使栈缓冲区溢出安全的做法是1根据需求定义适合的buffer2采取snprintf(buf, sizeof(buf), %s, hello world)来实时截断。     4. 误以为指针与其指向的对象是雷同巨细的         例如: int **makeArray(int n, int m){int i;int **A (int **)Malloc(n*sizeof(int)); // 这里错误地以为int *与int两种变量类型具有雷同的sizefor(i 0; i n; i) {A[i] (int *)Malloc(m * sizeof(int));}return A;}             上述代码目的是创立一个由n个指针构成的数组每一个指针均指向一个包含m个int的数组但误将sizeof(int *)写成sizeof(int)。这段代码只有在int和int *的size雷同的机器上运行良好。如果在像Core i7这样的机器上运行这段代码由于指针变量的size大于sizeof(int)则会引发代码中的for循环写越界。因为这些字中的一个很多是已分配块的边界标记脚部所以我们可能不会立即发明这个错误直到进程运行很久释放这个内存块时此时分配器中的合并代码会戏剧性地失败而没有任何明显的原因。这是在远处起作用action at distance的一个隐秘示例这类在远处起作用是与存储器有关的编程错误的典型情况。     5. 形成错位错误         错位Off-by-one错误是另一种常见的覆盖错误来源 每日一道理 全部世界因为有了阳光城市有了生机细小心灵因为有了阳光内心有了舒畅。明媚的金黄色树丛间小影成像在叶片上泛有的点点破碎似的金灿海面上直射反映留有的随波浪层层翻滚的碎片为这大自然创造了美景惹人醉的温馨之感浓浓暖意中夹杂着的明朗与柔情让雨过天晴后久违阳光的心灵重新得到了滋润 int ** makeArray(int n, int m){int i;int **A (int **)Malloc(n * sizeof(int *));for(i 0; i n; i) {A[i] (int *)Malloc(m * sizeof(int));}return A;}               很明显for循环次数分歧预期致使写越界。荣幸的话进程会立即崩溃不幸的话运行很长时间才抛出各种诡异问题。     6. 引用指针而不是它所指向的对象         如果不注意C操纵符的优先级和结合性就会错误地操纵指针而不是指针所指向的对象。         比如上面的函数其目的是删除一个有*size项的二叉堆里的第一项然后对剩下的*size-1项重建堆 int * binheapDelete(int **binheap, int *size){int *packet binheap[0];binheap[0] binheap[*size - 1];*size--; // 此处应该为(*size)--heapify(binheap, *size, 0);return (packet);}            上述代码中由于--和*优先级雷同从右向左结合所以*size--其实增加的是指针自己的值而非其指向的整数的值。因此服膺当你对优先级和结合性有疑问时就应该应用括号。     7. 误解指针运算         在C/C中指针的算术操纵是以它们指向的对象的巨细为单位来进行的。例如上面函数的功能是扫描一个int的数组并返回一个指针指向val的初次出现 int * search(int *p, int val){while(*p *p ! val) {p sizeof(int); // 此处应该为p否则p 4会致使大部分元素被跳过}}     8. 引用不存在的变量                 C/C新手不理解栈的规矩时可能会引用不再正当的当地变量例如 int * stackref(){int val;return val;}             函数返回的指针假设为p指向栈中的局部变量但该变量在函数返回后随着stackref栈帧的销毁已经不再有效。也即尽管函数返回的指针p仍然指向一个正当的存储器地址但它已经不再指向一个正当的变量了。当程序后续调用其它函数时存储器将重用刚才销毁栈帧处的存储器区域。再后来如果程序分配某个值给*p那么它可能实际上正在修改另一个函数栈帧中的数据从而潜在地带来灾难性的、令人困惑的后果。     9. 引用闲暇堆块中的数据        典型的错误为引用已经被释放了的堆块中的数据例如 int * heapref(int n, int m){int i;int *x, *y;x (int *)Malloc(n * sizeof(int));/* 各种操纵 */free(x);y (int *)Malloc(m * sizeof(int));for(i 0; i m; i) {y[i] x[i]; // 此处的x之前已经被释放了}}     10. 内存泄露        内存泄露是迟缓、隐性的杀手当程序员忘记释放已分配块时会产生这类问题例如 void leak(int n){int *x (int *)Malloc(n * sizeof(int));return;}            如果leak在程序全部生命周期内只调用数次则问题还不是很严峻但还是会浪费存储器空间因为随着进程结束操纵系统会回收这些内存空间。但如果leak()被经常调用那就会产生严峻的内存泄露最坏的情况下会占用全部虚拟地址空间。对于像守护进程和服务器这样的程序来讲内存泄露是严峻的bug必须加以看重。     【参考资料】 《深刻理解计算机系统》第9章 — 虚拟存储器      EOF      文章结束给大家分享下程序员的一些笑话语录 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。 --------------------------------- 原创文章 By 错误和内存--------------------------------- 转载于:https://www.cnblogs.com/xinyuyuanm/p/3150400.html
http://www.sadfv.cn/news/319964/

相关文章:

  • 做网站需要什么功能教师在哪些网站可以做兼职
  • 做网站风险分析长春手机网站
  • 镇江网站建设推广找思创大连企业制作网站
  • tom企业邮箱注册十堰网站seo技巧
  • 社交投票论坛网站开发wordpress快报插件
  • 台州市住房和城乡建设厅网站做有声小说网站
  • 专做机械零配件的网站怎么把网站做成软件
  • 大圣网站建设湖北襄阳住房保障和城市建设局网站
  • 传奇游戏网站怎么做嘉兴网站优化
  • 赤壁市药监局网站建设方案做网站要找什么
  • 松江品划企业网站建设搜狗关键词排名此会zjkwlgs
  • 网站制作有哪些种类宁波如何做seo排名优化
  • 食品营销型网站wordpress微信模块插件
  • 网站建设中html网页深圳品牌网站制作咨询电话
  • 二手书网站建设沈阳城市建设学院官网网站
  • 东营网站建设费用seo推广百度百科
  • 做维修广告在哪个网站wordpress 返回顶部
  • 江苏建设工程造价管理网站wordpress不能启动怎么解决方法
  • 青海省网站建设公司dns网站卫士 收录
  • 电子商业网站建设步骤建筑人才网微信群
  • 石家庄网站到首页排名空间刷赞网站推广
  • 可以做网站的服务器清华大学绿色大学建设网站
  • 解释网站为什么这样做网站运营商查询
  • 建设企业网站步骤设计师 必备的网站
  • 在线网站代码生成器成都网站排名生客seo怎么样
  • 网站架构设计师简历网站后台更新缓存失败
  • 岳池发展建设集团有限公司门户网站网站受到攻击 怎么做
  • 成都网站系统开发高级搜索引擎技巧
  • 做网站的设计公司宁波做网站的大公司有哪些
  • 网站备案风险做网站是怎样赚钱的