c++ 第1034行:Char 9:运行时错误:引用绑定到类型为'std::vector< int的空指针

ryhaxcpt  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(158)

我在leetcode上运行以下代码时出现运行时错误。当我删除用户定义的比较器函数时,它工作得很好。但使用用户定义的比较器函数时,会出现如下运行时错误:

  1. Line 1034: Char 9: runtime error: reference binding to null pointer of type 'std::vector<int, std::allocator<int>>' (stl_vector.h)
  2. SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9
  1. class Solution {
  2. public:
  3. vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
  4. int n = groupSizes.size();
  5. int visit[n];
  6. memset(visit, 0, sizeof(visit));
  7. vector<vector<int>>result;
  8. int m=0,k=0;
  9. for(int i=0;i<n;i++)
  10. {
  11. k=0;
  12. if(visit[i]!=1)
  13. {
  14. visit[i]=1;
  15. result[m][k]=i;
  16. k=1;
  17. for(int j=i+1;j<n;j++)
  18. {
  19. if(groupSizes[i]==groupSizes[j] && visit[j]!=1 && k+1<=groupSizes[i])
  20. {
  21. visit[j] = 1;
  22. result[m][k]=j;
  23. k++;
  24. }
  25. }
  26. m++;
  27. }
  28. else
  29. {
  30. continue;
  31. }
  32. }
  33. return result;
  34. }

};

j8yoct9x

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。

相关问题