Неправильная кодогенерация, MSVC 2017
От: johny5 Новая Зеландия
Дата: 11.03.20 11:03
Оценка: 13 (2)
Только что обнаружил, решил похвалиться — MSVC 2017 Community 15.9.21 и ниже создаёт бешенный мемори лик в релизе/х64 с таким кодом. В дебаге код корректный. В 2015й этот же код работал.


#include <iostream>
#include <vector>

class Battle
{
public:
    Battle() 
    {
        arr.reserve(100000);
    }

    std::vector<char> arr;
};

struct BattleArchiveAnswerMsg
{
    int            party_id = -1;
    Battle        battle;
};

volatile bool something = false;

BattleArchiveAnswerMsg  get_battles(int player_id)
{
    if(something)
    {
        return {};
    }


    BattleArchiveAnswerMsg  bansw;
    bansw.party_id = 1;

    if(something)
    {
        bansw.battle = Battle();

        return bansw;
    }

    return {};
}


int main()
{
    std::cout << "Hello World!\n"; 

    while(true)
        get_battles(32);
}


Деструктор ~Battle объекта в bansw не вызывается в конце функции и память течёт.

Подал им багрепорт.
Отредактировано 11.03.2020 11:34 johny5 . Предыдущая версия .
visual studio bug
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.