第 1034 行:字符 9:运行时错误:引用绑定到类型为“int”的空指针 (stl_vector.h)
Posted
技术标签:
【中文标题】第 1034 行:字符 9:运行时错误:引用绑定到类型为“int”的空指针 (stl_vector.h)【英文标题】:Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h) 【发布时间】:2021-05-10 13:28:58 【问题描述】:我正在解决 leetcode 问题合并排序数组,在 leetcode 上运行以下代码时出现运行时错误
给定两个排序整数数组 nums1 和 nums2,将 nums2 合并为 nums1 作为一个排序数组。 nums1 和 nums2 中初始化的元素个数分别为 m 和 n。您可以假设 nums1 的大小等于 m + n,这样它就有足够的空间来容纳来自 nums2 的其他元素。
示例 1: 输入:nums1 = [1,2,3,0,0,0],m = 3,nums2 = [2,5,6],n = 3 输出:[1,2,2,3,5,6]
示例 2: 输入:nums1 = [1],m = 1,nums2 = [],n = 0 输出:[1]
我的代码:
class Solution
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
int i = 0, j = 0, k = m-1;
while(i<=k && j<m)
if(nums1[i] < nums2[j])
i++;
else
swap(nums2[j++], nums1[k--]);
sort(begin(nums1), begin(nums1) + m );
sort(begin(nums2), end(nums2));
k = m + 1;
for(int l = 0; l < n; l++)
nums1[k] = nums2[l];
k++;
;
【问题讨论】:
想想j < m
,哪个向量j
索引,哪个向量的大小是m
。
对谁说只是使用调试器,附议。
@underscore_d 是我,但我删除了我的评论并将其变成了答案。我在此过程中丢失了调试器建议 :-) 我现在已将其添加到答案中。
@molbdnilo 谢谢!你说得对,应该是j < n
【参考方案1】:
这个:
k = m + 1;
使其跳过k[m]
处的插槽,并使for
循环访问nums1
越界,因为k
将到达6
和nums1[6]
越界。
制作:
k = m;
Demo
注意:如果您使用调试器,甚至在代码中添加打印输出以便查看索引变量的值,则很容易发现此类错误。
【讨论】:
@doggone_boy 与您在问题中显示的数据不同(查看演示)。您可能还有其他错误,例如对矢量大小做出假设等。问题中的错误应该通过此更改来解决。 是的,我找到了第二个。谢谢! @TedLyngmo以上是关于第 1034 行:字符 9:运行时错误:引用绑定到类型为“int”的空指针 (stl_vector.h)的主要内容,如果未能解决你的问题,请参考以下文章
运行时错误:引用绑定到“std::vector<int, std::allocator<int>>”类型的空指针 (stl_vector.h)
运行时错误:引用绑定到“std::vector<int, std::allocator<int> >”类型的空指针 (stl_vector.h)