第 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 &lt; m,哪个向量j索引,哪个向量的大小是m 对谁说只是使用调试器,附议。 @underscore_d 是我,但我删除了我的评论并将其变成了答案。我在此过程中丢失了调试器建议 :-) 我现在已将其添加到答案中。 @molbdnilo 谢谢!你说得对,应该是j &lt; n 【参考方案1】:

这个:

k = m + 1;

使其跳过k[m] 处的插槽,并使for 循环访问nums1 越界,因为k 将到达6nums1[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)

取消引用集合迭代器时将“字符串&”绑定到“常量字符串”时出错

无法对空引用执行运行时绑定,但它不是空引用

FxCop - CA1034 错误 - 为啥?