【问题标题】:reference binding to null pointer of type 'int' (stl_iterator.h)引用绑定到“int”类型的空指针 (stl_iterator.h)
【发布时间】:2020-02-28 10:24:10
【问题描述】:

谁能帮我解决这个错误

第 786 行:字符 17:运行时错误:引用绑定到类型为“int”的空指针 (stl_iterator.h)

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        vector<int>result;
        sort(nums.begin(),nums.end());
        int p=1;
        int minel=*min_element(nums.begin(),nums.end());
        int maxa=*max_element(nums.begin(),nums.end());
        for(int64_t i=minel;i<=maxa;i++)
        {
            int c=count(nums.begin(),nums.end(),i);
            if(c==0)
            {
                result.push_back(i);
            }
        }
        return result;
    }
};

【问题讨论】:

  • 代码将运行时错误作为引用绑定到“int”类型的空指针 (stl_iterator.h)
  • 请在问题中包含完整的错误信息。它应该包含例如行号(您必须向我们展示,因为这里的行号可能与您的不同)和 minimal reproducible example 也很好
  • 完成了,现在可以检查一下
  • int minel=*min_element(nums.begin(),nums.end()); 为什么不检查nums 是否为空?
  • 您发布的代码中没有第 786 行。对不起,坚持,但我真的很想帮助你得到答案。该问题很可能与 rafix 提到的内容有关,但要确定需要 minimal reproducible example 以及错误指向的行。

标签: c++ c++11 vector


【解决方案1】:

事情可能会失败,当你使用可能失败的东西时,你应该检查它是否失败。 特别是std::max_element returns...

迭代器指向范围 [first, last) 中的最大元素。如果范围内的多个元素等价于最大元素,则将迭代器返回到第一个这样的元素。 如果范围为空,则返回最后一个。

你应该改变这个

int minel=*min_element(nums.begin(),nums.end());

auto it = min_element(nums.begin(),nums.end());
if (it != nums.end()) {
    auto minel = *it;
}  else {
    // do not use it
}

或者在函数开始时检查nums 是否为空。该代码似乎用于在线竞赛。检查要求,如果空输入是有效输入,则需要处理它。如果空向量不是您必须处理的要求,您可能在代码中存在未显示的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2021-04-30
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多