привязка ссылки к нулевому указателю типа 'int' (stl_iterator.h) - PullRequest
0 голосов
/ 28 февраля 2020

может кто-нибудь помочь мне решить эту ошибку

Строка 786: Char 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;
    }
};

1 Ответ

1 голос
/ 28 февраля 2020

Вещи могут потерпеть неудачу, и когда вы используете что-то, что может потерпеть неудачу, вы должны проверить, если это произошло или нет. В частности std::max_element возвращает ...

Итератор для наибольшего элемента в диапазоне [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 пусто один раз в начале функции. Код, похоже, для онлайн-конкурса. Проверьте требования, если пустой ввод является допустимым, вам необходимо обработать его. Если пустой вектор не является обязательным требованием, возможно, у вас есть ошибка в коде, которую вы не показывали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...