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
。这会创建一个超出向量边界 (0) 的数据访问。如果您打算向 ans 添加一个新向量,请使用ans.push_back()
. 正如 balki 所说,您还可以通过在声明时分配所有条目来删除冗余分配,如下所示:
vector<vector<string>> ans { map.size() };
这将使您的代码无需任何额外更改即可工作(据我所知)。
推荐阅读
- go - 尽管设置了 GOPATH,但 echo $GOPATH 什么也不返回
- php - 无法在 Majove PHP 7.1.19 上找到/安装 mcrypy 无法
- methods - 函数文档中的类似参数的数组
- r - 找到多边形的质心
- python - Pandas 过滤多个“包含”而不是一个单元格,而是整个列
- matlab - 在 MATLAB 中使用 fgetl
- python - AWS Elastic Beanstalk - 会话不可用错误
- node.js - EC2 runInstances 函数不接受 SourceDestCheck 选项
- javascript - 当我删除一个矩形时,我怎样才能删除它的字母
- security - 将文件描述符“泄露”给客户端的安全隐患