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

为什么我的C++程序运行到特定位置后就停止继续执行了?

问题原因与修复方案

核心问题

你的程序触发了未定义行为直接崩溃,并非cout语句没有执行,而是崩溃发生在输出内容刷新到控制台之前。

具体错误点

你写的(cnt.end()--)->second=1;存在两个致命问题:

  • std::map的end()返回的是尾后迭代器,不指向任何有效元素,禁止解引用
  • 后置--运算符的返回值是自减前的迭代器值,你写的代码等价于:
    auto temp = cnt.end(); // 拿到尾后迭代器
    (临时迭代器对象)--; // 自减后的临时对象没有被使用
    temp->second = 1; // 直接解引用尾后迭代器,触发未定义行为
    

程序在此处直接崩溃,而前面的cout语句因为没有加endl或者手动调用flush(),输出内容还停留在行缓冲里没有打印到控制台,导致你误以为cout没有执行。

修复方法

如果要修改map最后一个元素的值,正确写法如下,注意要使用前置--:

// 先判断map非空,避免m=0时依然触发非法操作
if (!cnt.empty()) {
    auto last_iter = --cnt.end();
    last_iter->second = 1;
}

其他隐含错误

你后续代码里还有两处同类问题需要修复:

  • 遍历的初始化语句auto it=cnt.end()--同样要改为auto it = --cnt.end(),且要先判断map非空
  • 判断条件it!=--cnt.begin()是非法操作:begin()是map起始迭代器,对它做自减也是未定义行为,可以直接使用反向迭代器实现反向遍历逻辑,更安全易读:
    for (auto it = cnt.rbegin(); it != cnt.rend(); ++it) {
        if (it->second) {
            cout << it->first << " ";
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:54:03