首页 > 解决方案 > 在向量插入期间引用绑定到空指针错误

问题描述

我正在尝试解决一个特定的 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;
    }
};

标签: c++

解决方案


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

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

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


推荐阅读