Я новичок в программировании, и я пытаюсь закодировать функцию, которая получает кратчайшую строку из списка, но каждый раз, когда я ее запускаю, визуальная студия показывает ошибку «Исключение брошено: нарушение прав доступа на чтение». Где ошибка?C++ Почему моя программа бросает исключение?
#include <iostream>
#include <string>
using namespace std;
const string &shortest_string(initializer_list<string> strings) {
string *shortest_one = nullptr;
for (string string : strings) {
if (shortest_one == nullptr) shortest_one = &string;
else {
if (string.size() < shortest_one->size()) shortest_one = &string;
}
}
return *shortest_one;
}
int main() {
cout << shortest_string({ "hello" , "my", "name", "is", "dan" }) << endl;
return 0;
}
Потому что 'string string: ...' создает временную переменную, которая существует в течение одного цикла цикла и уничтожается в следующем цикле. И вы берете указатель на него (что указывает на освобожденную память) – myaut
'if (shortest_one = nullptr)' - Как вы думаете, что это делает? –
Итак, теперь, когда вы задали второй, другой вопрос, когда мы увидим реальный код, вы увидите поведение? – IInspectable