【问题标题】:C++: Segment fault 11 after performing "push_back"C++:执行“push_back”后段错误 11
【发布时间】: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

有人知道为什么吗? 谢谢!

【问题讨论】:

  • forlooploop 不是类型或数据结构的好名称。它没有告诉我它们代表什么。 memset 可能是错误的来源,但我不知道你正在使用它的 tp 是什么。 sscanf 也可能是错误的来源。您可以改用 C++ 流吗?您还应该考虑如果str 不包含st 字符会发生什么。它甚至可能是空的。
  • 最好的办法是逐行通过调试器。目前尚不清楚您要做什么,我们提供的输入是什么。我会查看变量st
  • @AnonMail 是的,我逐行调试,发现它在执行“push_back”时崩溃了。还是谢谢!
  • 这是否发生在第一个 push_back 上?在 100 万getlines 之后?另外,这个(forloop){val,lim,st/4} 在我看来很奇怪。

标签: c++ debugging computer-science


【解决方案1】:

如果对 push_back 的调用导致了问题,那么您可能内存不足,因为您推回了太多元素。计算向量中的元素数量,看看您是否不小心创建了太多。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多