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时会进行越界检查,而[]不会进行越界检查,
本文详细记录了解决C++程序在使用IDE运行时出现的进程结束,退出代码0xC0000005的问题。错误源在于vector访问越界,通过对代码的debug发现,尝试访问的元素超出了vector的边界。解决方案包括在访问前确认vector大小或使用.at()方法进行安全访问。通过实例展示了未正确访问vector导致的两种不同运行结果,并强调了避免未定义行为的重要性。
3127

被折叠的 条评论
为什么被折叠?



