【发布时间】:2015-11-23 03:10:36
【问题描述】:
第 1 部分
typedef long long ll;
struct forloop {
char val, lim;
int dep;
};
vector<forloop> loop;
第二部分
int main() {
//read
memset(tp, 0, sizeof tp);
loop.clear();
string str;
while (getline(cin, str)) {
int st = 0;
while (str[st] <= 32) st ++;
while (!loop.empty() && loop.back().dep >= st / 4) loop.pop_back();
if (str[st] == 'f') { //for loop
char val, lim;
string tmp = str.substr(st, 20);
sscanf(tmp.c_str(), "for %c in range(%c):", &val, &lim);
**loop.push_back((forloop){val,lim,st/4});**
}else { //lag
doit();
}
}
out();
return 0;
}
“loop.push_back((forloop){val,lim,st/4});”之后我遇到了分段错误:11
有人知道为什么吗? 谢谢!
【问题讨论】:
-
forloop和loop不是类型或数据结构的好名称。它没有告诉我它们代表什么。memset可能是错误的来源,但我不知道你正在使用它的tp是什么。sscanf也可能是错误的来源。您可以改用 C++ 流吗?您还应该考虑如果str不包含st字符会发生什么。它甚至可能是空的。 -
最好的办法是逐行通过调试器。目前尚不清楚您要做什么,我们提供的输入是什么。我会查看变量
st。 -
@AnonMail 是的,我逐行调试,发现它在执行“push_back”时崩溃了。还是谢谢!
-
这是否发生在第一个
push_back上?在 100 万getlines 之后?另外,这个(forloop){val,lim,st/4}在我看来很奇怪。
标签: c++ debugging computer-science