进程已结束,退出代码-1073741819 (0xC0000005)

C++使用IDE运行程序,程序结果正确,但显示进程已结束,退出代码-1073741819 (0xC0000005)

解决办法过程:

  1. 网上有的说是金山词霸,但是本人电脑未装金山词霸。排除此方案。
  2. 继续所搜解决办法:查询到错误代码含义:错误代码0xC0000005在Microsoft Windows中表示“访问冲突”,这相当于Linux的“分段错误”。
  3. 根据猜想是否为访问越界:
  4. 然后对程序错误的部分进行按行debug。
  5. 最终发现为vector访问越界。具体情景如下:
  6. 错误相关代码:
   vector<string>B{id, get_Mark_str(records[++index]) };
   cout <<"B.size -3: " << (B.size() -3) << "; B[B.size()-3]: " << B[B.size()-3] << ";B[B.size()-3] == [: " << (B[B.size()-3] == "[")<< endl;
   if( B[B.size()-3] == "[" and (B[B.size()-1] == "["  or B[B.size()-1]=="=")){}
            

首先初始化了vector,且初始大小为2
然后在if语句中:我用B[B.size()-3]进行了对vector的访问。导致访问结果未定义
有两种访问结果:
1.程序成功运行:

B.size -3: 18446744073709551615; B[B.size()-3]: ;B[B.size()-3] == [: 0
  进程已结束,退出代码0

2.程序错误退出:可以看到错误退出是因为,B[B.size()-3] 访问为定义,
与第一种情况对比发现,在程序在对B[B.size()-3]取值时,发生未定义行为
其结果不能正确与 "["作比较。

B.size -3: 18446744073709551615; B[B.size()-3]:
进程已结束,退出代码-1073741819 (0xC0000005)

综上问题出在对vector的访问越界上:
解决办法:访问前进行vector大小确认,或用.at()进行访问,因为.at()语法在访问vector时会进行越界检查,而[]不会进行越界检查,

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值