Утечка пользователя, утечка libc ++ или ложное срабатывание

Я строю динамическую библиотеку на Mac в C ++ 11, используя компилятор clang и стандартную библиотеку libc ++. Когда я запускаю valgrind для моего тестового кода, который ссылается на мою динамическую библиотеку, я получаю один блок памяти, который определенно потерян. Вот отчет о Вальгринде:

==45659== 36 bytes in 1 blocks are definitely lost in loss record 57 of 228
==45659==    at 0x66BB: malloc (vg_replace_malloc.c:300)
==45659==    by 0x31EAB0: __Balloc_D2A (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x31F2A5: __d2b_D2A (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x31BED6: __dtoa (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x3438A9: __vfprintf (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x36A2DA: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x34FF66: _vsnprintf (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x34FFC5: vsnprintf_l (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x34057A: snprintf_l (in /usr/lib/system/libsystem_c.dylib)
==45659==    by 0x10C75A: std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, double) const (in /usr/lib/libc++.1.dylib)
==45659==    by 0xF3221: std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(double) (in /usr/lib/libc++.1.dylib)
==45659==    by 0x12102: lmpsdata::header_data::write_dimension(std::__1::basic_ofstream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (header_data.cpp:75)
==45659== 
==45659== LEAK SUMMARY:
==45659==    definitely lost: 36 bytes in 1 blocks
==45659==    indirectly lost: 0 bytes in 0 blocks
==45659==      possibly lost: 0 bytes in 0 blocks
==45659==    still reachable: 18,340 bytes in 215 blocks
==45659==         suppressed: 25,274 bytes in 374 blocks

Этот конкретный раздел кода не имеет дело с памятью, которую я выделил динамически, используются только объекты и потоки STL. Я приложил как заголовочный файл, так и метод, о котором сообщил valgrind как вызывающий утечку. Может кто-нибудь объяснить, что здесь происходит? Я абсолютно сбит с толку.

header_data.h

    #ifndef ____header_data__
#define ____header_data__

#include <string>
#include <fstream>
#include <cstdint>
#include <vector>
#include <map>

namespace lmpsdata {
class header_data
{//LAMMPS header information
    //only the point particle header information has been implemented
    //since the current atom base class is designed for point particles only
public:
    header_data():xdim(2), ydim(2), zdim(2), tiltdim(3) {}
    //methods
    void read(const std::string &, const std::string &);
    void write(std::ofstream &, const std::string &); //this write command will replace the one
    std::string check_header_keyword(const std::string &, bool &);
    uint64_t get(const std::string&);
    std::vector<double>& get_vector(const std::string&);
    void set(const std::string&, uint64_t);
    void set_vector(const std::string&, std::vector<double>&);

private:
    //methods
    void read_dimension(const std::string&, const std::string&);
    void write_dimension(std::ofstream&, const std::string&);

    //members
    uint64_t atomnum;
    uint64_t bondnum;
    uint64_t anglenum;
    uint64_t dihedralnum;
    uint64_t impropernum;
    uint64_t atomtypenum;
    uint64_t bondtypenum;
    uint64_t angletypenum;
    uint64_t dihedraltypenum;
    uint64_t impropertypenum;
    uint64_t extrabondnum;

    std::vector<double> xdim;
    std::vector<double> ydim;
    std::vector<double> zdim;
    std::vector<double> tiltdim;//for use with triclinic system

    std::map<std::string, uint64_t&> int_map  {
        {"atoms", atomnum},
        {"bonds", bondnum},
        {"angles", anglenum},
        {"dihedrals", dihedralnum},
        {"impropers", impropernum},
        {"atom types", atomtypenum},
        {"bond types", bondtypenum},
        {"angle types", angletypenum},
        {"dihedral types", dihedraltypenum},
        {"improper types", impropertypenum},
        {"extra bond per atom", extrabondnum},
    };
    std::map<std::string, std::vector<double>&> v_map {
        {"xlo xhi", xdim},
        {"ylo yhi", ydim},
        {"zlo zhi", zdim},
        {"xy xz yz", tiltdim}
    };
};
}
#endif /* defined(____header_data__) */

lmpsdata.cpp только метод write_dimension и показано начало файла

#include "header_data.h"
#include <stdexcept>
using namespace lmpsdata;
void header_data::write_dimension(std::ofstream &file, const std::string& keyword)
{
    std::vector<double>& data = v_map.at(keyword);
    for (auto value: data) {
        file << value <<  " ";
    }
}

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Ответы на вопрос(1)

Ваш ответ на вопрос