« squid clean cache or purge cache | Main | Firefox 1.5.0.5 起解决了紫光输入法的兼容问题 »
July 27, 2006
查出一处隐藏很深的内存泄漏 写了一段域名分拆的代码
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://windtear.net/archives/2006/07/27/001039.html http://windtear.net/archives/2006/07/27/001039.html 查出一处隐藏很深的内存泄漏 写了一段域名分拆的代码 查出来了也就不算深了 简单说就是路径问题:申请内存 使用内存 释放内存 由于配置有变化导致释放内存部分代码没发生作用 感谢老阙 satan 小白帮忙定位 小白从局外的角度 根据给出的问题相关的那几行代码 只看申请释放的地方 很快就看出问题了 具体解决这里略去 思路有两个: 1. 从申请处着手,必要时才申请、使用 2. 从释放处着手(全局释放处 src/HttpRequest.c requestDestroy),判断是否要释放 顺便写了一段域名分拆的代码(为了排版能显示下 if部分代码样式有调整) int len=strlen(wtdomain); int count=0, countmax=2, i, start=0; if (len>=7 && (wtdomain[len-3]=='.'&&wtdomain[len-2]=='c'&&wtdomain[len-1]=='n'&&wtdomain[len-7]=='.') && ( (wtdomain[len-6]=='c'&&wtdomain[len-5]=='o'&&wtdomain[len-4]=='m') || (wtdomain[len-6]=='n'&&wtdomain[len-5]=='e'&&wtdomain[len-4]=='t') || (wtdomain[len-6]=='o'&&wtdomain[len-5]=='r'&&wtdomain[len-4]=='g') ) ) { countmax=3; } for (i=len-1;i>=0;i--) { if (wtdomain[i] == '.') count++; if (count==countmax) { start=i+1; break;} } if (count==countmax) { for (i=0;i<=len-start;i++) wtdomain[i]=wtdomain[start+i]; } stringInit(&cookie_domain, wtdomain); |
Posted by windtear at July 27, 2006 11:57 PM