1. C++ / Говнокод #23835

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    class PriceCache {
    public:
      FlightStorage(const std::size_t count) {
        for (std::size_t i = 0; i < count; ++i) {
          flights.emplace_back(FlightCache::get(i));
          prices.emplace_back(&flights.back(), Price::getFor(flights.back()));
        }
      }
    
    private:
      std::vector<Flight> flights;
      std::vector<const Flight *, double> prices;
    };

    "случайные сегфолты при обращении к PriceCache::prices"

    Запостил: Elvenfighter, 28 Февраля 2018

    Комментарии (6) RSS

    • Пелять, название конструктора не заменил...
      Ответить
      • class PriceCache {
        public:
          PriceCache(const std::size_t count) {
            for (std::size_t i = 0; i < count; ++i) {
              flights.emplace_back(FlightCache::get(i));
              prices.emplace_back(&flights.back(), Price::getFor(flights.back()));
            }
          }
        
        private:
          std::vector<Flight> flights;
          std::vector<std::pair<const Flight *, double>> prices;
        };
        Ответить
    • Эпично. Указатели слишком опасны, нужно использовать std::reference_wrapper.
      Починил, проверь
      flights.reserve(count);
      // опционально, но желательно
      prices.reserve(count);
      Ответить
      • >Починил
        Ответить
        • Ну если размер кэша потом не меняется, то реально починил.
          Ответить
          • Дык я так и починил (кеш потом не меняется), только заменяется (один обьект другим). Потому и запстил этот псто.
            Ответить

    Добавить комментарий