PART1С ++: ошибка Сегмент 11 после выполнения "push_back"
typedef long long ll;
struct forloop {
char val, lim;
int dep;
};
vector<forloop> loop;
PART2
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) {вал, Пт, ул/4});" У меня возникла ошибка сегментации: 11
Кто-нибудь знает почему? Спасибо!
'forloop' и' loop' не являются хорошими именами для типов или структур данных. Он не говорит мне, что они представляют. 'memset' может быть источником ошибок, но я не знаю, что это за' tp' вы его используете. 'sscanf' также может быть источником ошибок. Можете ли вы использовать потоки C++? Вы также должны учитывать, что должно произойти, если 'str' не содержит символов' st'. Это может быть даже пусто. –
Лучше всего идти по строкам через отладчик. Неясно, что вы пытаетесь сделать, какой ввод вы предоставляете. Я бы посмотрел на переменную 'st'. –
@AnonMail Да, я выполнил отладку по строке и обнаружил, что он разбился, когда он выполнял «push_back». Спасибо, в любом случае! –