jeudi 13 août 2015

malloc error in Eigen using g++4.9.3

This issue appears only on g++4.9.3. Consider the minimal code:

#include <iostream>
#include <Eigen/dense>

int main()
{
    Eigen::MatrixXcd mat = Eigen::MatrixXcd::Identity(2,2);
    std::cout << mat << std::endl;
}

I compiled it with -Og and -D_GLIBCXX_DEBUG (I needed both of these flag to trigger the error):

g++ -Og -D_GLIBCXX_DEBUG -I./eigen minimal.cpp

Running the program results in:

a.out(42247,0x7fff7cf9e300) malloc: * error for object 0x10c6ca3d0: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug Abort trap: 6

Valgrind spits out something along the lines:

==42296== Invalid free() / delete / delete[] / realloc()
==42296==    at 0x10000B957: free (vg_replace_malloc.c:480)
==42296==    by 0x100038594: std::basic_stringbuf<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::pbackfail(int) (in /opt/local/lib/libgcc/libstdc++.6.dylib)
==42296==    by 0x1048056C7: ???
==42296==    by 0x27: ???
==42296==    by 0x1048053E7: ???
==42296==    by 0x100038CA1: std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow(int) (in /opt/local/lib/libgcc/libstdc++.6.dylib)
==42296==    by 0x672A2E24: ???
==42296==    by 0x1000033E7: ??? (in ./a.out)
==42296==  Address 0x1000033d0 is in the Data segment of ./a.out
==42296==
(1,0) (0,0)
(0,0) (1,0)
==42296==
==42296== HEAP SUMMARY:
==42296==     in use at exit: 111,830 bytes in 436 blocks
==42296==   total heap usage: 523 allocs, 91 frees, 124,150 bytes allocated
==42296==
==42296== LEAK SUMMARY:
==42296==    definitely lost: 0 bytes in 0 blocks
==42296==    indirectly lost: 0 bytes in 0 blocks
==42296==      possibly lost: 0 bytes in 0 blocks
==42296==    still reachable: 76,948 bytes in 5 blocks
==42296==         suppressed: 34,882 bytes in 431 blocks

I am not sure what's happening. Does anyone know if this is a g++ related issue or an Eigen issue? I am using the latest Eigen 3.2.5 and g++4.9.3 from MacPorts on OS X Yosemite.

PS: The error does not appear if I compile with clang or with g++5.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire