那就靠注释代码了。结果辛苦一天。 注释到一处不可能发生该问题的地方。 郁闷哒。
想知道,大家如何调试use after free问题的
//将c:\\tmp文件夹下的所有文件的内容全部放到用malloc分配的内存中
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
struct FB {
char fn[256];
size_t fl;
char *b;
struct FB *next;
struct FB *prev;
} *fh,*fb,*ft;
char ln[256];
char fpn[256];
FILE *af;
FILE *f;
int L,n;
int main() {
system("dir /b /a-d c:\\tmp\\*.* >c:\\allfn.txt");
af=fopen("c:\\allfn.txt","r");
if (NULL==af) {
printf("Can not open file c:\\allfn.txt!\n");
return 1;
}
fh=NULL;
fb=NULL;
n=0;
while (1) {
if (NULL==fgets(ln,256,af)) break;
L=strlen(ln);
if ('\n'==ln[L-1]) ln[L-1]=0;
printf("read %s\n",ln);
strcpy(fpn,"c:\\tmp\\");
strcat(fpn,ln);
ft=(struct FB *)malloc(sizeof(struct FB));
if (NULL==ft) {
printf("Can not malloc ft!\n");
fclose(af);
return 2;//之前的malloc在main退出后由操作系统自动free
}
printf("ft[%d]==%p\n",n,ft);
strcpy(ft->fn,fpn);
f=fopen(fpn,"rb");
if (NULL==f) {
printf("Can not open file %s!\n",fpn);
fclose(af);
return 3;//之前的malloc在main退出后由操作系统自动free
}
ft->fl=_filelength(fileno(f));
ft->b=malloc(ft->fl);
if (NULL==ft->b) {
printf("Can not malloc ft->b!\n");
fclose(f);
fclose(af);
return 4;//之前的malloc在main退出后由操作系统自动free
}
printf("ft[%d]->b==%p\n",n,ft->b);
if (ft->fl!=fread(ft->b,1,ft->fl,f)) {
printf("fread error!\n");
fclose(f);
fclose(af);
return 5;//之前的malloc在main退出后由操作系统自动free
}
fclose(f);
ft->next=NULL;
if (NULL==fh) {
ft->prev=NULL;
fh=ft;
} else {
fb->next=ft;
ft->prev=fb;
}
fb=ft;
n++;
}
fclose(af);
printf("-----list-----\n");
for (ft=fh;NULL!=ft;ft=ft->next) {
printf("%8d %s\n",ft->fl,ft->fn);
if (NULL!=ft) fb=ft;
}
printf("-----free-----\n");
n--;
if (NULL!=fh) {
for (ft=fb->prev;NULL!=ft;ft=ft->prev) {
if (NULL!=ft->next->b) {
printf("ft[%d]->b==%p\n",n,ft->next->b);
free(ft->next->b);
}
if (NULL!=ft->next) {
printf("ft[%d]==%p\n",n,ft->next);
free(ft->next);
}
n--;
}
if (NULL!=fh->b) {
printf("ft[0]->b==%p\n",fh->b);
free(fh->b);
}
printf("ft[0]==%p\n",fh);
free(fh);
}
return 0;
}
//C:\tmp\tmp\Debug>dir /a-d c:\tmp
// 驱动器 C 中的卷是 C_HD5_1
// 卷的序列号是 1817-D526
//
// c:\tmp 的目录
//
//找不到文件
//
//C:\tmp\tmp\Debug>tmp
//找不到文件
//-----list-----
//-----free-----
//
//C:\tmp\tmp\Debug>dir /a-d c:\tmp
// 驱动器 C 中的卷是 C_HD5_1
// 卷的序列号是 1817-D526
//
// c:\tmp 的目录
//
//2011-06-30 18:04 44,840 my_c.rar
//2011-06-30 17:18 1,036 err.frm
//2011-06-30 14:32 14,243 出租.txt
//2011-06-28 12:08 23,681 MSDN98书签.txt
// 4 个文件 83,800 字节
// 0 个目录 17,041,870,848 可用字节
//
//C:\tmp\tmp\Debug>tmp
//read my_c.rar
//ft[0]==00421800
//ft[0]->b==00520068
//read err.frm
//ft[1]==00421670
//ft[1]->b==0052AFC0
//read 出租.txt
//ft[2]==00421530
//ft[2]->b==00378F28
//read MSDN98书签.txt
//ft[3]==004213F0
//ft[3]->b==0052B3F8
//-----list-----
// 44840 c:\tmp\my_c.rar
// 1036 c:\tmp\err.frm
// 14243 c:\tmp\出租.txt
// 23681 c:\tmp\MSDN98书签.txt
//-----free-----
//ft[3]->b==0052B3F8
//ft[3]==004213F0
//ft[2]->b==00378F28
//ft[2]==00421530
//ft[1]->b==0052AFC0
//ft[1]==00421670
//ft[0]->b==00520068
//ft[0]==00421800
//
//C:\tmp\tmp\Debug>
V4L2学习记录 这个还没有分析完,先在这放着,防止电脑坏掉丢了,以后再完善 V4L2
参考博文:... 一、系统安装与配置 系统环境: 虚拟环境: VMWare Workstation 7.1.4(英文版) 操作系统: CentOS-6.0-i386(原内核2.6.32,将会把内核升级至2.6.36) 注:CentOS 是RedHat的一个社区版本. (由于
创建: 2004-07-06 20:17更新: 2004-07-12 14:47链接: http://www.opencjk.org/~scz/windows/200407121605.txt-------------------------------------------------------------------------- ☆ 概述 ☆ 编写...
Valgrind能做什么? •内存使用检测,包括: –内存泄漏 –非法内存访问 –未初始化变量使用 –重复释放内存 •多线程竞争 –检测死锁 -检测竞争Valgrind还能做什么? •性能分析 –Ca
原文:http://www.cppblog.com/feixuwu/archive/2010/07/10/119980.aspx 昨天一个同事一大早在群里推荐了一个google project上的开源内存分配器(http://code.google.com/p/google-perftools/),据说google的很多...
Linux驱动开发必看详解神秘内核 ... ...IT168 技术文档】在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。我们将学习内核定时器
http://blog.chinaunix.net/uid-13703776-id-67894.html 简述 一 列文件清单 二:执行程序 三:显示数据 四:断点(breakpoint) 五.断点的管理 ... 六.... 七.... 八.... 九.... 十....
原文:http://www.91linux.com/html/article/program/cpp/20081017/13581.html...或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB
小问题有大智慧-代理服务器的监测 是几个月前的文章,最近碰到别人问如何设置代理的问题,又回顾了部分代码,虽然时间不长,还是有不少记不清了。,于是就整理了那个设置代理的函数,代码是实践的科学,每写一次,...
一:准备PC机:172.16.7.153broad:172.16.7.155# ifconfigeth0 Link encap:Ethernet HWaddr 00:07:63:00:00:0B inet addr:172.16.7.155 Bcast:172.16.7.255 Mask:255.255.255.0 UP BROADCAST
http://www.codeproject.com/KB/system/driverdev6asp.aspx?fid=262328 Introduction ... It has been a while since I have updated this series and I have found some fre
CSDN 讨论总结系列:Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/561501.aspx) Jiangsheng的CSDN Digest (Oct 2005)...
[wuyaalan@localhost desktop]$ cd /proc/sys/vm/ [wuyaalan@localhost vm]$ ls block_dump hugepages_treat_as_movable oom_kill_allocating_task compact_memory hugetlb_shm_gro
CSDN 讨论总结系列:Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/561501.aspx) Jiangsheng的CSDN Digest (Oct 2005)...
前面三篇博文我们分别回顾了冒泡排序、选择排序、插入排序、希尔排序、归并排序、堆排序和快速排序。关于排序算法有几种分类标准,稳定与非稳定、内部与外部。 所谓稳定的排序算法,意思是如果待排序序列有相同...
UniDAC是一个功能强大的非可视化跨数据库的数据访问组件,可用于Delphi,Delphi for .NET,C++Builder,and Lazarus (Free Pascal)。它提供了对流行数据库服务器的统一访问,像Oracle,Microsoft SQL Server,MySQL...
Detours vs....Detours is available for free with a noncommercial license but it only supports the x86 platform. Detours can also be licensed for commercial use which also gives you full x64
转贴:EhLib使用全攻略 KeyLife富翁笔记 作者?: archonwang标题?: Ehlib 的使用 2003-12-5 15:22:29 使用 TDBSumList 组件 还记得以前有朋友问过这样一...
另外该线程池具有动态伸缩性,它能根据执行 任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简 单。 ...
2003-12-5 15:22:29 使用 TDBSumList 组件 还记得以前有朋友问过这样一个问题:在 DBGrid 下如何像 Excel 一样能够做统计计算,实话说,使用 DBGrid 来做的话着实不易,不过现在有了这个咚咚,相信会简单些。...
大学英语四级词汇与语法和完形填空题以考查各类词组和固定搭配为重点,这些词组和搭配在阅读理解、翻译和写作中也有重要作用,所以这里将各类词组以词性为中心加以分类,以便帮助大家学习和记忆。...
作者: archonwang 标题: Ehlib 的使用 关键字: 前 言 分类: 个人专区 密级: 公开 ...呵呵,没想到,这么个小东西一下子就把我迷住了,细细品来,的确是一个非常好的控件作品。......
转贴:EhLib使用全攻略 KeyLife富翁笔记 作者: archonwang标题: Ehlib 的使用 关键字: 前 言 分类: 个人专区 密级: 公开 (评分:★★★ , 回复: 10, 阅读: 4649) »» 最近闲来无事,就装了一个 ...
KeyLife富翁笔记 作者: archonwang标题: Ehlib 的使用 关键字: 前 言 分类: 个人专区 密级: 公开 (评分:★★★ , 回复: 10, 阅读: 4649) »» 最近闲来无事,就装了一个 Ehlib 来玩。...
KVM 介绍(1):简介及安装 http://www.cnblogs.com/sammyliu/p/4543110.html 学习 KVM 的系列文章: (1)介绍和安装 ... (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)