XP 以后似乎很少遇到“该内存不能为 r/w”错误,为什么?

2022-01-03 01:12:53 +08:00
 mrcn

用 XP 时,这个对话框很容易遇见,关个机都能在那个蓝色的界面弹这个,也是最棘手的,一般解决不了。似乎 Win7 以后就比较难遇到了,是内核有什么重要改进吗?还是我的错觉,其实一样多 /一样少?

1868 次点击
所在节点    问与答
9 条回复
ysc3839
2022-01-03 01:20:20 +08:00
大概是你的系统或软件有问题,正常来说都很罕见的
xupefei
2022-01-03 01:46:39 +08:00
那时候 DEP 还是新玩意,很多程序不兼容吧。
ysc3839
2022-01-03 01:53:44 +08:00
@xupefei XP 默认不对第三方应用开启 DEP 。而且“内存不能为”这个错误也不只是内存权限的问题,似乎任何未被捕获的异常都会出现这个提示。
mrcn
2022-01-03 01:57:07 +08:00
@ysc3839 这样嘛,估计是我的系统太乱了
还记得当时还有专门的“该内存不能为 R/W”修复工具,然后用了也没弄好,哈哈
ysc3839
2022-01-03 02:07:09 +08:00
@mrcn 这种修复工具大概率没用的,因为这个提示实际意思是程序有未捕获的异常,怎么可能一个工具能解决任意软件的任意问题?
wevsty
2022-01-03 02:12:54 +08:00
多方面的原因导致的这个结果。

该内存不能为 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 之类的错误,而是告诉你程序崩溃了。(根本上取消了这个提示)
yaoyao1128
2022-01-03 03:05:34 +08:00
个人猜测还有一个原因是 xp 的 ghost 版本多 被精简 /修改的 dll 也多 32 位主导 7 过后 64 位主导了 之后因为安装程序逻辑变更 ghost 也少了
Felldeadbird
2022-01-03 15:40:43 +08:00
楼主这个问题真的好!我才发现自从抛弃 xp 后,这个弹窗真的没再出来过。
shequ2046
2022-01-03 16:46:00 +08:00
xp 也没碰见过这个,估计和我基本不用国产软件有直接关系。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825859

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX