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

C++程序运行触发ucrtbased.dll未处理异常崩溃是什么原因?

错误原因

你遇到的0xC00000FD错误是典型的堆栈溢出,根本原因是代码存在无终止条件的无限递归调用:

  • main函数调用doA()
  • doA()执行后调用doB()
  • doB()执行后又调用doA()

二者形成死循环调用链,没有任何跳出逻辑。每次函数调用都会在栈空间中压入返回地址、栈帧等数据,而程序的栈空间是固定大小的(Windows下默认通常为1MB),循环调用成千上万次后栈空间被完全耗尽,就触发了堆栈溢出崩溃,报错指向第8行是因为doB()中调用doA()的语句刚好是栈被撑爆时正在执行的代码。

修复方案

给递归调用增加终止条件即可,示例修改代码如下:

#include <iostream>

// 增加计数器控制递归次数,也可以用静态变量、函数参数传递等方式实现
int call_count = 0;
const int MAX_CALL_COUNT = 10;

void doA();

void doB()
{
    std::cout << "In doB()\n";
    // 调用前判断是否超过最大次数
    if (call_count < MAX_CALL_COUNT) {
        call_count++;
        doA();
    }
}


void doA()
{
    std::cout << "Starting doA()\n";
    // 调用前判断是否超过最大次数
    if (call_count < MAX_CALL_COUNT) {
        call_count++;
        doB();
    }
    std::cout << "Ending doA()\n";
}

int main()
{
    std::cout << "Starting main()\n";
    doA();
    std::cout << "Ending main()\n";
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:27:00