proxy代理   soft软件   IT 业界特快   norton 诺顿病毒库   代理列表   search FTP搜索   whois IP地理位置   blog 追求完美  
money理财   life生活   RSS聚合门户   firefox WEB浏览器   免费域名   typeset 假古文   AntiVirus 反病毒   ipcn 站点导航  

« 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);
本blog WWW

Posted by windtear at July 27, 2006 11:57 PM

本站使用中的任何问题,请与 windtear @ windtear.net 联系
Copyright© 1999-2024 Windtear. All rights reserved.