You need to enable JavaScript to run this app. C++矩形周长面积程序出现ld返回1退出状态、运行时Error5访问拒绝,关杀毒仍无效
优惠活动
大模型
产品
解决方案
定价
更多

C++矩形周长面积程序出现ld返回1退出状态、运行时Error5访问拒绝,关杀毒仍无效

矩形计算C++程序的异常问题排查(链接报错、执行权限拦截)

已确认的问题前置条件

  • 代码本身和同班同学完全一致,其余同学的同代码程序可正常运行
  • 已尝试关闭杀毒软件,问题仍持续复现
  • 先后出现两类连续报错:
    • 编译阶段链接器报Error ld returned 1 exit status,无法生成可执行文件
    • 勉强生成可执行文件后运行,弹错Failed to execute "...\Example2902.exe": Error 5: Access is denied,且系统持续将该程序判定为威胁

核心成因

  • 链接器报错(ld返回1退出状态)的本质是链接器没有权限写入最终的exe文件,并非代码本身存在语法问题
    • 之前某次生成的同名exe已经被安全软件误判锁入隔离区,哪怕后续关闭了杀毒软件,系统内核层面的文件拦截驱动依然占着这个文件的句柄,链接器要覆盖写入新exe的时候,因为文件被锁无法操作,直接抛出链接错误
    • 项目所在的C:\Users\name\Documents\jan30\ 文件夹权限被误改,当前登录用户没有写入、执行权限,链接过程自然无法完成
  • 运行阶段报Access denied、系统误判的核心原因是安全拦截没有真正关闭,并非代码携带恶意程序
    • 多数第三方杀毒软件的"关闭防护"操作只是关闭了前台界面,内核级的文件过滤驱动还在系统后台运行,只要匹配之前的误判哈希、路径规则,就会自动拦截所有同路径下编译生成的程序
    • Windows系统自带的受控文件夹访问(勒索软件防护)默认会拦截文档目录下所有无数字签名的exe文件,哪怕第三方杀毒全关,这个系统自带防护依然在生效
    • 代码里调用的system ("PAUSE") 属于调用系统shell的操作,容易被旧版杀毒的启发式规则标记为可疑程序,反复触发拦截循环

可直接落地的解决步骤

  1. 清理所有残留的占用文件
    • 关闭所有IDE、后台运行的杀毒软件进程,打开任务管理器结束残留的杀毒相关进程
    • 直接删除原jan30文件夹下所有旧的exe、.obj中间编译文件,不要保留任何和当前项目相关的旧文件,打破"文件被锁→编译失败"的循环
  2. 避开高拦截率的目录权限限制
    • 不要把项目放在文档目录下编译,在非系统防护默认扫描的路径新建独立编译文件夹,比如C:\cpp_workspace\ ,把源码移到新文件夹下,同时在IDE设置里把编译输出路径也指向这个新文件夹
    • 右键点击新建的编译文件夹,打开「属性-安全」,确认当前登录账号有完全控制、读取和执行、写入权限,权限不足的话手动补上
  3. 真正解除安全拦截规则
    • 打开Windows安全中心的病毒防护设置,把新建的编译文件夹加入排除列表;同时打开保护历史记录,找到之前被误判拦截的Example2902.exe记录,选择还原并标记为允许,避免后续同名文件被自动拦截
    • 如果之前安装过第三方杀毒,检查系统程序和驱动列表里有没有残留的杀毒驱动项,彻底卸载残留,不要只靠软件界面的"关闭防护"功能
  4. 调整代码的易误判点
    • 移除代码里的system ("PAUSE"),开启IDE自带的「运行结束后暂停控制台」功能,减少被启发式规则误判的概率

内容的提问来源于stack exchange,提问作者Aohlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 02:27:03