You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2022调试时触发0xc0000142错误(Windows Terminal默认)

问题:Windows Terminal作为默认终端时,关闭控制台窗口触发0xc0000142错误并反复弹出

问题重现

  • 环境:Windows 11 22H2(22621.675)、Visual Studio 2022,Windows Terminal为系统及VS默认终端
  • 测试代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    for (int i = 0; i < 10; i++)
    {
        printf("num: %d\n", i);
        system("pause");
    }
}
  • 现象:程序运行中点击控制台窗口右上角关闭按钮,弹出「应用程序无法正常启动(错误: 0xc0000142)」窗口;关闭错误窗口后会反复弹出(次数等于循环次数),即使关闭IDE也会出现;改用Ctrl+Pause终止程序无异常,切换默认终端为cmd.exe后错误消失。

成因分析

结合Process Explorer的测试结果,核心问题在于Windows Terminal的进程关联逻辑和system("pause")的调用机制:

  1. Terminal内拖拽运行场景:test.exe是Windows Terminal的子进程,关闭Terminal时会终止整个进程树,test.exe直接被终止,不会触发后续的system("pause")调用,因此无异常。
  2. 双击运行/VS调试场景:Windows Terminal与test.exe无直接进程关联,关闭窗口时仅终止Terminal进程,但test.exe仍在运行。此时test.exe的后续system("pause")尝试启动新的终端会话,但Windows Terminal的初始化依赖已被破坏,导致启动失败,抛出0xc0000142(应用程序初始化失败)错误;循环中的每一次system("pause")都会触发一次错误弹窗,因此会反复出现。

解决方法

1. 替换system("pause")为更安全的方案

system("pause")依赖终端环境且会创建外部进程,建议改用不依赖外部进程的暂停方式:

// 方案1:使用cin等待输入
cin.get();
// 方案2:使用_getch()(需包含<conio.h>)
#include <conio.h>
_getch();

这类方法无需启动外部终端进程,即使终端窗口被关闭,程序会直接终止而非反复触发错误。

2. 修改Windows Terminal的关闭行为

打开Windows Terminal设置,进入「启动」选项卡,将「关闭行为」设置为「关闭所有窗口时终止所有进程」。这样在双击运行程序时,关闭Terminal窗口会同时终止关联的test.exe进程,避免后续错误触发。

3. 调试时使用VS内置控制方式

在VS2022中,调试时通过「调试」菜单的「停止调试」(快捷键Ctrl+Shift+F5)终止程序,而非直接关闭终端窗口,从根源避免触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:23