Я использовал инструмент CRT для поиска утечек памяти в своем коде, и когда обнаружил, что я исправил одну вещь, и она позаботилась об утечке памяти, но я могу " Не понимаю, что там произошло.Исправлена утечка памяти, и я не понимаю, почему это сработало
Мой исходный код был:
while (getline(inf, line))
{
Video vid = *deserialize_video(line);
Video_dict[vid.get_name()] = vid;
}
где deserialize_video это функция, которая получит строку в качестве входных данных и возвращает указатель на новый объект, созданный в этой функции, типа видеопластиной. То, что я пытаюсь сказать, это функция заканчивается:
возвращения нового видео (название, год, тип, цена, длина, жанр);
После нескольких попыток я закончил с этим кодом:
while (getline(inf, line))
{
Video * vid = deseriallize_video(line);
Video_dict[vid->get_name()] = *vid;
delete vid;
}
И решить мои утечки памяти. Проблема в том, что я не могу понять, сколько дубликатов было создано в 1-м, и почему первый код был неправильным, если функция deserialize ... отправляет обратно указатель.
Ну, когда вы вызываете функцию, и она возвращает указатель _and_, вы получаете право собственности на этот указатель, чтобы он удалял _you_, чтобы удалить его. Поскольку вы не удаляли его, у вас закончилась утечка памяти. –
Мы ничего не знаем о 'Video' или' Video_dict' или 'deserialize_video()', но я могу предположить, что не удаление выделенного объекта является причиной утечки памяти. –
, разница между двумя фрагментами кода заключается в том, что вторая устанавливает индекс массива в данные, хранящиеся в значении адреса, где в качестве первого задает индекс массива самому фактическому адресу. – Mike