c++ - 为什么会出现段错误 (C++ 98)?

标签 c++ iterator segmentation-fault

我一直在做 C++ 作业(我是新手)。我应该按字母顺序将具有字符串成员的实例化结构添加到列表中(不允许使用排序机制)。

虽然我已经弄清楚了大部分功能,但我仍然坚持这一点:

    void insertWord(vector<word_entry>& v, word_entry& we){

       for(vector<word_entry>::iterator it = v.begin(); it != v.end();++it){

        int determine = it->word.compare(we.word); //**1

         if(determine > 0){ //**2
          v.insert(it, we);
         }
       }
       v.push_back(we);
    }

如果代码写得不合常规,请提前致歉。无论如何,我想要做的是将对象插入迭代器的位置 - 如果 if-return (**2) 返回 true,则在迭代器指向的对象 (**1) 之前。

有什么想法吗? :(

最佳答案

插入 vector 会导致任何现有的迭代器失效。下次您尝试递增迭代器时,您会遇到未定义的行为。要解决此问题,您可以使用

it = v.insert(it, we);

关于c++ - 为什么会出现段错误 (C++ 98)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685172/

相关文章:

c - 我的 C 代码中的段错误需要帮助

c++ - 指向 vector 元素的指针崩溃

c++ - 无法在 Visual Studio 2010 中打开包含文件 'stdlib.h'

python - 创建一个堆栈和使用 for 循环遍历堆栈的迭代器

c++ - 将迭代器用作参数时在内部增加迭代器是否安全?

c - 为什么这段代码的行为不可预测?

c++ - Assimp 对现有 aiVector3D 的访问冲突

c++ - SQLite 绑定(bind)参数到通配符

Rust 函数接受一个迭代器,并返回一个带有变异项的迭代器?

c - 在结构体中使用指向动态二维数组的指针