V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mrcn
V2EX  ›  问与答

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

  •  
  •   mrcn · 183 天前 · 1418 次点击
    这是一个创建于 183 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2022-01-03 16:46:00 +08:00
    ysc3839
        1
    ysc3839  
       183 天前
    大概是你的系统或软件有问题,正常来说都很罕见的
    xupefei
        2
    xupefei  
       183 天前 via iPhone
    那时候 DEP 还是新玩意,很多程序不兼容吧。
    ysc3839
        3
    ysc3839  
       183 天前
    @xupefei XP 默认不对第三方应用开启 DEP 。而且“内存不能为”这个错误也不只是内存权限的问题,似乎任何未被捕获的异常都会出现这个提示。
    mrcn
        4
    mrcn  
    OP
       183 天前
    @ysc3839 这样嘛,估计是我的系统太乱了
    还记得当时还有专门的“该内存不能为 R/W”修复工具,然后用了也没弄好,哈哈
    ysc3839
        5
    ysc3839  
       183 天前
    @mrcn 这种修复工具大概率没用的,因为这个提示实际意思是程序有未捕获的异常,怎么可能一个工具能解决任意软件的任意问题?
    wevsty
        6
    wevsty  
       183 天前   ❤️ 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 之类的错误,而是告诉你程序崩溃了。(根本上取消了这个提示)
    yaoyao1128
        7
    yaoyao1128  
       183 天前 via iPhone
    个人猜测还有一个原因是 xp 的 ghost 版本多 被精简 /修改的 dll 也多 32 位主导 7 过后 64 位主导了 之后因为安装程序逻辑变更 ghost 也少了
    Felldeadbird
        8
    Felldeadbird  
       183 天前
    楼主这个问题真的好!我才发现自从抛弃 xp 后,这个弹窗真的没再出来过。
    shequ2046
        9
    shequ2046  
       183 天前   ❤️ 1
    xp 也没碰见过这个,估计和我基本不用国产软件有直接关系。。。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2924 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:35 · PVG 20:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.