C++使用IDE运行程序,程序结果正确,但显示进程已结束,退出代码-1073741819 (0xC0000005)
解决办法过程:
- 网上有的说是金山词霸,但是本人电脑未装金山词霸。排除此方案。
- 继续所搜解决办法:查询到错误代码含义:
错误代码0xC0000005在Microsoft Windows中表示“访问冲突”,这相当于Linux的“分段错误”。
- 根据猜想是否为访问越界:
- 然后对程序错误的部分进行按行debug。
- 最终发现为
vector
访问越界。具体情景如下: - 错误相关代码:
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
时会进行越界检查,而[]
不会进行越界检查,