代码的后一部分在某种程度上影响了前一部分
Latter part of code somehow affecting former
我有这个程序:
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
int main(int argc, const char * argv[]) {
std::vector<int> task_scores;
int n;
std::cin >> n;
for(int i = 0; i < n; i++) {
int sc;
std::cin >> sc;
task_scores.push_back(sc);
}
std::map<std::string, std::vector<size_t>> student_solutions;
std::string command = "";
while(true) {
std::vector<std::string> tok_com;
getline(std::cin, command);
std::stringstream strstream(command);
std::string token = "";
while (getline(strstream, token, ' ')) {
std::cout << token;
tok_com.push_back(token);
}
if (tok_com[0] == "SOLVED") {
std::string name = tok_com[1];
int task = std::stoi(tok_com[2]);
if(std::find(student_solutions[name].begin(), student_solutions[name].end(), task) !=
student_solutions[name].end()) {
student_solutions[name].push_back(task);
}
}
}
return 0;
}
如果注释掉If子句,那么代码就可以正常工作。但如果不这样做,则在尝试定制令牌时,代码将以EXC_BAD_ACCESS
停止。这怎么会发生?
但如果不这样做,则在尝试定制令牌时,代码将以
EXC_BAD_ACCESS
停止。这怎么会发生?
if (tok_com[0] == "SOLVED") {
// ^^^
要求之前至少有一个值实际存储到循环中的tok_com
向量中。
在取消引用tok_com
:之前,您应该测试tok_com.empty()
if (!tok_com.empty() && tok_com[0] == "SOLVED") {
// ^^^^^^^^^^^^^^^^^^^
// ...
}
您实际经历的是未定义的行为,包括冰箱爆炸、鼻孔里飞出的小恶魔,或者只是调试环境或操作系统引发的异常。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++:如何使函数只返回作为列表一部分的字符串
- std::sort()函数无法对向量的一部分进行排序
- 为什么擦除方法会影响结束方法
- 内联如何影响模块接口中的成员函数
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在容量内调整矢量大小时的性能影响
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 未达到的情况会影响开关外壳性能
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 反转整数的一部分(一半)的函数
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- C 指针和对象作为不同类的一部分
- 循环仅对第一行正常工作.其他行不受 for 的影响
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 如何分析代码的哪一部分创建了线程?
- 模板如何影响C++中隐式声明的规则?
- 命名空间信息会影响C++的可读性
- 如何使用接口指针调用方法,该指针是其具体类的一部分,而不是接口的一部分
- 代码的后一部分在某种程度上影响了前一部分