Ошибка выполнения: привязка ссылки к нулевому указателю типа 'int' (stl_vector.h) С++

Я знаю, что эта ошибка относится к неопределенному поведению (я так думаю), но я перечитал свой код 20 раз и не вижу, что такое UB!?

Я делаю Leetcode 238. Продукт Array Except Self, и вот мой код (кстати, я не знаю, правильно ли это решение):

class Solution { public:
vector<int> productExceptSelf(vector<int>& nums) {
    vector<int> result;
    map<int, int> map;
    
    for(int i = 0; i < nums.size(); i++){
        map[i] = nums[i];
    }
    
    for(int i = 0; i < nums.size(); i++){
        for(auto& it : map){
            if(it.first != i){
                result[i] = nums[i] * result[i];
            }
        }
    }
    
    return result;
} };

Вы забыли изменить размер результирующего вектора.

273K 18.05.2022 02:25

Не могли бы вы уточнить? Я полный новичок.

PhilBreezyy 18.05.2022 02:31

Это доказывает, что использование таких сайтов, как LeetCode, и решение случайных головоломок по программированию — не лучший способ изучения C++. std::vector не растет автоматически при использовании []. Кроме того, такие сайты, как LeetCode, предполагают, что вы знаете язык, который будете использовать, достаточно хорошо, чтобы никогда не делать ошибок, когда вы их делаете — они не предназначены для обучения C++.

PaulMcKenzie 18.05.2022 02:31
result[i] = nums[i] * result[i]; --> result.at(i) = nums[i] * result.at(i); -- Это должно ясно объяснить проблему, так как это вызовет исключение std::out_of_range.
PaulMcKenzie 18.05.2022 02:35

Ах да, достаточно просто! Спасибо. Что было бы хорошим способом учиться тогда? Я также прохожу курс курса, я уверен, что они упомянули об этом, но я, должно быть, пропустил это.

PhilBreezyy 18.05.2022 02:41

@PhilBreezyy Видеть это

PaulMcKenzie 18.05.2022 02:42
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
6
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете заменить vector<int> result; на vector<int> result(nums.size()); Это инициализирует все значения result равными 0. Это не решит проблему, но избавит вас от ошибки времени выполнения, которую вы получаете.

Другие вопросы по теме