51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1560|回复: 15
打印 上一主题 下一主题

为什么程序没有崩溃?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-5-25 08:48:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我编了一个C函数
#include <stdio.h>
main()
{
   int foo;
   int *p=NULL;
   foo=*p;
}

按照这个网页说的http://blogs.msdn.com/chappell/archive/2005/01/12/351856.aspx,这个函数属于内存非法访问,系统会崩掉。但是我在Win-TC上编译运行,就一个命令行窗口一闪而过,什么提示都没有,系统还是好好的。为什么?
我的系统是Windows XP Home-CN, 打上了最新的补丁。

[ 本帖最后由 zhaochuan 于 2006-5-25 09:15 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2006-5-25 09:16:41 | 只看该作者
还有这个
   int foo;

   int * ip = (int*)16777216; //Address 0x01000000,  in another process' address space  

   foo = *ip; //Crash!
程序也没有崩溃。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2006-5-25 09:31:32 | 只看该作者
你的程序好好的?什么叫好好的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2006-5-25 11:47:34 | 只看该作者
就是运行程序时,只有一个命令行窗口一闪而过,其它什么反应都没有。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2006-5-25 14:02:53 | 只看该作者
你觉得应该怎么样
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2006-5-25 14:23:42 | 只看该作者
赵同学的意思应该是

按常理来说
这个程序应该会崩溃
但是却没有崩溃

这是什么原因?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2006-5-25 15:18:38 | 只看该作者
你把程序改成这样呢?
#include <stdio.h>
main()
{
   int foo=2;
   int *p=NULL;
   *p=foo;
}
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2006-5-25 16:18:39 | 只看该作者
原帖由 empire 于 2006-5-25 15:18 发表
你把程序改成这样呢?
#include <stdio.h>
main()
{
   int foo=2;
   int *p=NULL;
   *p=foo;
}

程序还是没有崩溃。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2006-5-25 16:23:06 | 只看该作者
原帖由 ilovejolly 于 2006-5-25 14:02 发表
你觉得应该怎么样

Our operating system shuts down this badly behaving application with an error like the following:


Unhandled exception at 0x004173c8 in cpractice.exe: 0xC0000005: Access violation reading location 0x00000000.

我想要这个结果。

我们测的项目需要很多系统或程序crash掉的实例,真难找呀。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2006-5-25 23:00:11 | 只看该作者
我机器上运行这段代码会报异常.你可以设断点单步跟一下,应该会报异常的.
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2006-5-26 11:14:43 | 只看该作者
我在VC上试了一下,总算成功了。
谢谢老师,肚子还有诸位同学。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2006-5-28 04:30:47 | 只看该作者
在TC上不成功的原因:
Win-TC实际上就是给TC加了个windows界面,它本质还是一个16位的编译器,生成的程序都是16位的。对于TC这个编译器来说,它对于读0地址(楼主例)和写0地址(empire例)的异常有自己的处理,区别于win 32位系统下的异常处理。TC对读0地址的处理是不作处理,程序继续往下执行;对写0地址是不进行该写操作,在所有语句执行完后返回“Null pointer assignment”。win 32位系统编译器下则是报楼主希望报的错。操作系统和编译环境本身不会崩溃,因为已经做了相应的异常处理。

楼主希望有msdn文档里描述的提示是在win32平台上才会出现的:)
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2006-5-28 04:31:33 | 只看该作者
64位还没试过,不确定呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2006-5-28 14:23:39 | 只看该作者
32位~vc6

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2006-5-28 22:46:33 | 只看该作者
楼上这个是直接运行编译好的可执行程序,在"Click here"里可看到对应的错误代码和说明。
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2006-5-30 16:51:36 | 只看该作者
楼上解释的很详细,谢了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-27 05:37 , Processed in 0.078765 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表