我在leetcode上运行以下代码时出现运行时错误。当我删除用户定义的比较器函数时,它工作得很好。但使用用户定义的比较器函数时,会出现如下运行时错误:
Line 1034: Char 9: runtime error: reference binding to null pointer of type 'std::vector<int, std::allocator<int>>' (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9
class Solution {
public:
vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
int n = groupSizes.size();
int visit[n];
memset(visit, 0, sizeof(visit));
vector<vector<int>>result;
int m=0,k=0;
for(int i=0;i<n;i++)
{
k=0;
if(visit[i]!=1)
{
visit[i]=1;
result[m][k]=i;
k=1;
for(int j=i+1;j<n;j++)
{
if(groupSizes[i]==groupSizes[j] && visit[j]!=1 && k+1<=groupSizes[i])
{
visit[j] = 1;
result[m][k]=j;
k++;
}
}
m++;
}
else
{
continue;
}
}
return result;
}
};
1条答案
按热度按时间j8yoct9x1#
您使用的是结果向量,而不初始化其大小或添加任何元素。在访问结果向量的元素之前,您需要调整结果向量的大小。用vector result(n);替换行vector result;,用n个空向量初始化result。
在for循环中,当你尝试给result[m][k]赋值时,会导致运行时错误,因为result中的向量没有调整大小。不应直接赋值,而应使用push_back()函数将元素添加到result中的相应向量。replace [m][k] = i;[m].push_back(i);结果[m][k] = j; push_back(j);.
确保在k+1<=groupSizes[i]条件下检查当前组大小是否等于k而不是k+1。在该条件下,将k+1替换为k。