用 XP 时,这个对话框很容易遇见,关个机都能在那个蓝色的界面弹这个,也是最棘手的,一般解决不了。似乎 Win7 以后就比较难遇到了,是内核有什么重要改进吗?还是我的错觉,其实一样多 /一样少?
1
ysc3839 2022-01-03 01:20:20 +08:00
大概是你的系统或软件有问题,正常来说都很罕见的
|
2
xupefei 2022-01-03 01:46:39 +08:00 via iPhone
那时候 DEP 还是新玩意,很多程序不兼容吧。
|
3
ysc3839 2022-01-03 01:53:44 +08:00
@xupefei XP 默认不对第三方应用开启 DEP 。而且“内存不能为”这个错误也不只是内存权限的问题,似乎任何未被捕获的异常都会出现这个提示。
|
6
wevsty 2022-01-03 02:12:54 +08:00 7
多方面的原因导致的这个结果。
该内存不能为 read/write 这个提示大多数时候是程序自己因为各种原因内存读写越界了。 一个是新版本的 C/CPP 编译器对这种内存越界的错误做了更多的检测和防范,比如 VS2005 开始就提供了 strcpy_s 一类的函数,如果内存有越界调试阶段就更容易检测到(因为会弹 CRT Error )。 注:( XP 的下一代 Vista 是 2006 年发布的) 另一方面,Vista 开始使用了新的 NT 6 内核( XP 是 NT 5 ),新内核做了更多的安全限制。 比如:XP 上经常会有 DLL 想办法插入其他进程,但是 Vista 以后同样是管理员权限的用户在开启 UAC 的情况下非管理员权限的进程就没办法向管理员权限的进程插 DLL 。 这些安全限制虽然不是直接避免了这个问题,但是开发人员乱插 DLL ,乱搞系统内核的风气确实是有一定程度的遏制。 最后一方面是,新的系统对于这类问题不再是单单的给弹不能 read 之类的错误,而是告诉你程序崩溃了。(根本上取消了这个提示) |
7
yaoyao1128 2022-01-03 03:05:34 +08:00 via iPhone
个人猜测还有一个原因是 xp 的 ghost 版本多 被精简 /修改的 dll 也多 32 位主导 7 过后 64 位主导了 之后因为安装程序逻辑变更 ghost 也少了
|
8
Felldeadbird 2022-01-03 15:40:43 +08:00
楼主这个问题真的好!我才发现自从抛弃 xp 后,这个弹窗真的没再出来过。
|
9
shequ2046 2022-01-03 16:46:00 +08:00 1
xp 也没碰见过这个,估计和我基本不用国产软件有直接关系。。。
|