Valgrind complains about some of my code, but this code is pretty much an example of libpng code from the documentation:
Valgrind output example.
==15847== 14,384 bytes in 31 blocks are definitely lost in loss record 239 of 240 ==15847== at 0x4C28F9F: malloc (vg_replace_malloc.c:236) ==15847== by 0x5837381: ??? (in /lib/x86_64-linux-gnu/libpng12.so.0.46.0) ==15847== by 0x581FD63: png_create_info_struct (in /lib/x86_64-linux-gnu/libpng12.so.0.46.0) ==15847== by 0x67837C: Star::Image::loadPng(char const*) (StarImage.cpp:35) ==15847== by 0x4E7721: Star::Assets::threadedFetchImage(Star::String const&, bool) (StarAssets.cpp:400) ==15847== by 0x4EB4F4: Star::Assets::threadPoolMain() (StarAssets.cpp:256) ==15847== by 0x6B18B9: Star::ThreadImpl::runThread(void*) (StarThread_unix.cpp:19) ==15847== by 0x5CE2EFB: start_thread (pthread_create.c:304) ==15847== by 0x6A1359C: clone (clone.S:112)
and the code method around line 35. Line 35 is marked with a comment and begins with png_infop end_info
ImagePtr Image::loadPng(char const* filename) { FILE *fp = fopen(filename, "rb"); if (!fp) throw ImageException(strf("Could not open file %s in Image::loadPng", filename)); png_byte header[8]; int res = fread(header, 1, sizeof(header), fp); if (!res) throw ImageException(strf("Cannot read file %s", filename)); if (png_sig_cmp(header, 0, sizeof(header))) throw ImageException(strf("File %s is not a png image!", filename)); png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); if (!png_ptr) { fclose(fp); throw ImageException("Internal libPNG error"); } png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, nullptr, nullptr); fclose(fp); throw ImageException("Internal libPNG error"); } png_infop end_info = png_create_info_struct(png_ptr);
This is almost identical to the example located at http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-3
Is this an internal leak? Or am I just missing something really obvious? Or is Walgrind choking?
For reference, I am currently using libpng1.2.46.
source share