MTG / essentia

C++ library for audio and music analysis, description and synthesis, including Python bindings
http://essentia.upf.edu
GNU Affero General Public License v3.0
2.81k stars 525 forks source link

memory leak in VectorOutput ? #940

Open terryleetracymc opened 4 years ago

terryleetracymc commented 4 years ago

in the source code: src/essentia/streaming/algorithms/vectoroutput.h

class VectorOutput : public Algorithm { protected: Sink _data; std::vector* _v;

public: VectorOutput(std::vector* v = 0) : Algorithm(), _v(v) { setName("VectorOutput"); declareInput(_data, 1, "data", "the input data"); }

~VectorOutput() { // _v not release ? *### if (!_v && _v->size()){ std::vector().swap(_v); }** }

terryleetracymc commented 4 years ago

I find memory leak when i use EasyLoader & MonoLoader with standard mode but not AudioLoader

terryleetracymc commented 4 years ago

==144387== Memcheck, a memory error detector ==144387== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==144387== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info ==144387== Command: ./c_lib ==144387== Parent PID: 130881 ==144387== ==144387== ==144387== HEAP SUMMARY: ==144387== in use at exit: 56,001 bytes in 643 blocks ==144387== total heap usage: 26,345 allocs, 25,702 frees, 49,687,091 bytes allocated ==144387== ==144387== 488 bytes in 1 blocks are definitely lost in loss record 73 of 97 ==144387== at 0x4C2BD2C: memalign (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==144387== by 0x4C2BDF1: posix_memalign (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==144387== by 0x81046FC: av_malloc (in /usr/local/lib/libavutil.so.55.34.100) ==144387== by 0x810489D: av_mallocz (in /usr/local/lib/libavutil.so.55.34.100) ==144387== by 0x80FD09A: av_frame_alloc (in /usr/local/lib/libavutil.so.55.34.100) ==144387== by 0x531219F: essentia::streaming::AudioLoader::openAudioFile(std::string const&) (in /usr/local/lib/libessentia.so) ==144387== by 0x5312F85: essentia::streaming::AudioLoader::reset() (in /usr/local/lib/libessentia.so) ==144387== by 0x53114E7: essentia::streaming::AudioLoader::configure() (in /usr/local/lib/libessentia.so) ==144387== by 0x5142260: essentia::streaming::MonoLoader::configure() (in /usr/local/lib/libessentia.so) ==144387== by 0x5290FAC: essentia::streaming::EasyLoader::configure() (in /usr/local/lib/libessentia.so) ==144387== by 0x528FBE7: essentia::standard::EasyLoader::configure() (in /usr/local/lib/libessentia.so) ==144387== by 0x407A53: essentia::EssentiaFactory::create_i(std::string const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&) const (in /home/liteng.lt/c_lib/build/c_lib) ==144387== ==144387== 618 (432 direct, 186 indirect) bytes in 1 blocks are definitely lost in loss record 74 of 97 ==144387== at 0x4C2A105: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==144387== by 0x4FB68D9: essentia::streaming::connect(essentia::streaming::SourceBase&, essentia::streaming::DevNullConnector) (in /usr/local/lib/libessentia.so) ==144387== by 0x5141541: essentia::streaming::MonoLoader::MonoLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x5034BAA: essentia::EssentiaFactory::Registrar<essentia::streaming::MonoLoader, essentia::standard::MonoLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x5290491: essentia::streaming::EasyLoader::EasyLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x503502A: essentia::EssentiaFactory::Registrar<essentia::streaming::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x529084C: essentia::standard::EasyLoader::createInnerNetwork() (in /usr/local/lib/libessentia.so) ==144387== by 0x50493C1: essentia::EssentiaFactory::Registrar<essentia::standard::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x40798B: essentia::EssentiaFactory::create_i(std::string const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&) const (in /home/liteng.lt/c_lib/build/c_lib) ==144387== by 0x40326E: DSPProcessor::get_stft_spectrm(std::string const&, int, float, float) (in /home/liteng.lt/c_lib/build/c_lib) ==144387== ==144387== 619 (432 direct, 187 indirect) bytes in 1 blocks are definitely lost in loss record 75 of 97 ==144387== at 0x4C2A105: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==144387== by 0x4FB68B9: essentia::streaming::connect(essentia::streaming::SourceBase&, essentia::streaming::DevNullConnector) (in /usr/local/lib/libessentia.so) ==144387== by 0x51415BF: essentia::streaming::MonoLoader::MonoLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x5034BAA: essentia::EssentiaFactory::Registrar<essentia::streaming::MonoLoader, essentia::standard::MonoLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x5290491: essentia::streaming::EasyLoader::EasyLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x503502A: essentia::EssentiaFactory::Registrar<essentia::streaming::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x529084C: essentia::standard::EasyLoader::createInnerNetwork() (in /usr/local/lib/libessentia.so) ==144387== by 0x50493C1: essentia::EssentiaFactory::Registrar<essentia::standard::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x40798B: essentia::EssentiaFactory::create_i(std::string const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&) const (in /home/liteng.lt/c_lib/build/c_lib) ==144387== by 0x40326E: DSPProcessor::get_stft_spectrm(std::string const&, int, float, float) (in /home/liteng.lt/c_lib/build/c_lib) ==144387== ==144387== 626 (432 direct, 194 indirect) bytes in 1 blocks are definitely lost in loss record 76 of 97 ==144387== at 0x4C2A105: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==144387== by 0x4FB6879: essentia::streaming::connect(essentia::streaming::SourceBase&, essentia::streaming::DevNullConnector) (in /usr/local/lib/libessentia.so) ==144387== by 0x51414FA: essentia::streaming::MonoLoader::MonoLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x5034BAA: essentia::EssentiaFactory::Registrar<essentia::streaming::MonoLoader, essentia::standard::MonoLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x5290491: essentia::streaming::EasyLoader::EasyLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x503502A: essentia::EssentiaFactory::Registrar<essentia::streaming::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x529084C: essentia::standard::EasyLoader::createInnerNetwork() (in /usr/local/lib/libessentia.so) ==144387== by 0x50493C1: essentia::EssentiaFactory::Registrar<essentia::standard::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x40798B: essentia::EssentiaFactory::create_i(std::string const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&) const (in /home/liteng.lt/c_lib/build/c_lib) ==144387== by 0x40326E: DSPProcessor::get_stft_spectrm(std::string const&, int, float, float) (in /home/liteng.lt/c_lib/build/c_lib) ==144387== ==144387== 626 (432 direct, 194 indirect) bytes in 1 blocks are definitely lost in loss record 77 of 97 ==144387== at 0x4C2A105: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==144387== by 0x4FB6879: essentia::streaming::connect(essentia::streaming::SourceBase&, essentia::streaming::DevNullConnector) (in /usr/local/lib/libessentia.so) ==144387== by 0x5141580: essentia::streaming::MonoLoader::MonoLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x5034BAA: essentia::EssentiaFactory::Registrar<essentia::streaming::MonoLoader, essentia::standard::MonoLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x5290491: essentia::streaming::EasyLoader::EasyLoader() (in /usr/local/lib/libessentia.so) ==144387== by 0x503502A: essentia::EssentiaFactory::Registrar<essentia::streaming::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x4FB42A6: essentia::EssentiaFactory::create_i(std::string const&) const (in /usr/local/lib/libessentia.so) ==144387== by 0x529084C: essentia::standard::EasyLoader::createInnerNetwork() (in /usr/local/lib/libessentia.so) ==144387== by 0x50493C1: essentia::EssentiaFactory::Registrar<essentia::standard::EasyLoader, essentia::standard::EasyLoader>::create() (in /usr/local/lib/libessentia.so) ==144387== by 0x40798B: essentia::EssentiaFactory::create_i(std::string const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&, std::string const&, essentia::Parameter const&) const (in /home/liteng.lt/c_lib/build/c_lib) ==144387== by 0x40326E: DSPProcessor::get_stft_spectrm(std::string const&, int, float, float) (in /home/liteng.lt/c_lib/build/c_lib) ==144387== ==144387== LEAK SUMMARY: ==144387== definitely lost: 2,216 bytes in 5 blocks ==144387== indirectly lost: 761 bytes in 20 blocks ==144387== possibly lost: 0 bytes in 0 blocks ==144387== still reachable: 53,024 bytes in 618 blocks ==144387== suppressed: 0 bytes in 0 blocks ==144387== Reachable blocks (those to which a pointer was found) are not shown. ==144387== To see them, rerun with: --leak-check=full --show-leak-kinds=all ==144387== ==144387== For counts of detected and suppressed errors, rerun with: -v ==144387== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 6 from 3)

terryleetracymc commented 4 years ago

the valgrind shows ↑