c++ - vector 插入期间引用绑定(bind)到空指针错误

标签 c++

我正在尝试解决一个特定的 leetcode 问题,但我似乎无法弄清楚我哪里出错了。

问题是这个:https://leetcode.com/problems/group-anagrams/ 我的代码是:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& str) {
        unordered_map<string, vector<int>> map;
        vector<string> newstr = str;
        int size = str.size();
        //pushing those indices of `str` into the map which share common permutation
        for(int i=0; i<size; i++){
            sort(newstr[i].begin(), newstr[i].end());
            map[newstr[i]].push_back(i);
        }

        vector<vector<string>> ans;
        int i=0;
        for(auto itr: map){
            int v_size = itr.second.size();
            for(int j=0; j<v_size; j++)
                //cout<<str[itr.second[j]]<<" "; //this query works perfectly
                ans[i].push_back(str[itr.second[j]]); //erroneous code
            i++;
        }
        return vector<vector<string>>();
        // return ans;
    }
};

最佳答案

您正在访问 ans[i] 而没有事先在 ans 中分配任何内存。这会创建一个超出 vector 边界 (0) 的数据访问。 如果您打算向 ans 添加一个新 vector ,请使用 ans.push_back()。正如 balki 所说,您还可以通过在声明时分配所有条目来删除冗余分配,如下所示:

vector<vector<string>> ans { map.size() };

这将使您的代码无需任何额外更改即可工作(据我所知)。

关于c++ - vector 插入期间引用绑定(bind)到空指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55172006/

相关文章:

c++ - Unresolved 错误

c++ - 通过指针反序列化时,boost::serialization如何分配内存?

c++ - Qt 使用来自 csv 的数据自动生成按钮

C++17 单独的显式方法模板实例化声明和定义

c++ - MFC,OPENFILENAME 结构 : m_ofn. lpstrCustomFilter

c++ - 按相似性(相同 ID)对数据进行分组的最佳算法

c++ - 迭代器与指针的双端队列插入失效(引用)

c++ - OpenSceneGraph 内存管理

c++ - 在 C++ 中以图形方式为图形绘制顶点

c++ - 将变量传递给 lambda