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

VS中银行账户C++程序存款时崩溃,cpp.sh运行正常

问题根源:未初始化的numTransactions成员变量

你的银行程序在Visual Studio中选择存款(Case 2)时崩溃,但在cpp.sh能正常运行,核心原因出在类成员变量numTransactions没有被初始化上,这是C++中常见的未定义行为问题。

为什么不同环境表现不一样?

C++标准规定,未初始化的非静态类成员变量的值是未定义的——也就是说,它的值取决于程序运行的内存环境:

  • 在cpp.sh这类在线编译器中,运行环境默认会把未初始化的数值型成员变量设为0,所以numTransactions一开始就是0,存款逻辑能正常执行,不会出问题。
  • 但在Visual Studio的Debug模式下,编译器会特意把未初始化的栈内存填充为0xCCCCCCCC(对应十进制的-858993460)。这个负数会让deposit函数里的if (numTransactions < 200)判断为真,接着尝试访问AccountActivity[numTransactions]——用负数作为数组索引,这直接触发了数组越界访问,VS的Debug内存检测机制会立刻终止程序,也就是你看到的崩溃。

如何修复?

只需要修改account类的构造函数,把numTransactions初始化为0即可:

account::account() {
    balance = 0;
    numTransactions = 0; // 新增这行,初始化交易计数器
}

额外的代码优化建议

除了这个崩溃问题,你的代码还有两个潜在bug,建议一并修复:

  • while (menu = true)是赋值操作,不是条件判断,会导致循环永远无法退出,应该改成while (menu == true)或者更简洁的while (menu)。
  • case 4的分支没有添加break语句,执行完这个分支后会自动落到default分支,导致额外输出Please choose from 1 to 4,记得加上break:
case 4:
    cout << "The largest deposit is: " << a.getLargest() << endl;
    break; // 新增这行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:37