C ++:执行“push_back”后的段错误11

时间:2015-11-23 03:10:37

标签: c++ debugging computer-science

PART1

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){val,lim,st / 4})之后;”我得到了分段错误:11

有谁知道为什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果对push_back的调用导致了问题,那么由于你推回了太多元素,你可能会内存不足。计算向量中的元素数量,以确定您没有意外创建过多的元素。

我想知道你最后的评论中“后”的意思。你的意思是它可能发生在doit()函数中吗?