Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71849
  • 博文数量: 10
  • 博客积分: 1431
  • 博客等级: 上尉
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-15 19:45
文章分类
文章存档

2011年(1)

2010年(6)

2009年(3)

我的朋友

分类:

2009-04-15 20:06:41

   今天调试程序时出现的问题。

   从提示的信息看,应该是程序的堆栈遭到破坏,但是难点在于,无法定位出破坏的原因。

    经过分析,确实是由于访问堆栈越界造成。例如下面:

   char *p;

   sour[20];

   memset(sour, 's', sizeof(sour));

   p = (char *)calloc(10,char);

   ............

   memcpy(p, sour, sizeof(sour));//问题之源,但这里并不会出错

   free(p);//这里就会发生上述问题。从这里来看,我们一眼就看到是访问越界,但在实际的代码中,发现这一点却没有这么简单,当然这也取决于代码的复杂程度。

   但是可以明确一点的是,要仔细检查是否访问申请的堆栈发生的越界。

   参考:

阅读(6467) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:根据TTL初始值来判断操作系统

给主人留下些什么吧!~~