为什么std::cin在以下情况下会给我一个段错误?[复制]

Why does std::cin give me a seg-fault in the following case? [duplicate]

提问人:MK4 提问时间:10/24/2023 最后编辑:273KMK4 更新时间:10/24/2023 访问量:37

问:

下面的代码在第二行中显示了一个分段错误。我不知道为什么?

    string str;
    cin >> str;  //Problem!!!
    list<char> L;
    for(char s: str) L.push_back(s);
    
    auto it = L.begin();
    while(it != prev(L.begin())){
        if(*(it) == 'A' && *(next(it)) == 'B'){L.erase(it, next(next(it)));}
        else it++;
    }
    cout << str << endl;
C++ 字符串 分段错误

评论

0赞 Igor Tandetnik 10/24/2023
prev(L.begin())表现出未定义的行为。显然之前没有迭代器begin()
0赞 Igor Tandetnik 10/24/2023
L.erase(it, next(next(it)))无效。之后使用它的任何尝试都会表现出未定义的行为。it
0赞 user12002570 10/24/2023
在进行调用之前,迭代器需要有效。如果返回值是相应的边界迭代器之一,则该值将是无效的迭代器;即 it == begin() 表示 prev(it),it == end() 表示 next(it)。
2赞 user12002570 10/24/2023
您给出段错误的假设(在标题中)也是不正确的。std::cin
0赞 MK4 11/14/2023
啊!,谢谢!

答: 暂无答案