mmirzadeh
mmirzadeh

Reputation: 7079

Strange runtime error when using vectors

I have this very strange problem with my code at runtime when I'm running it in parallel with mpi:

*** glibc detected *** ./QuadTreeConstruction: munmap_chunk(): invalid pointer: 0x0000000001fbf180 ***
======= Backtrace: =========
/lib/libc.so.6(+0x776d6)[0x7f38763156d6]
./QuadTreeConstruction(_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm+0x20)[0x423f04]
./QuadTreeConstruction(_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv+0x50)[0x423e72]
./QuadTreeConstruction(_ZNSt13_Bvector_baseISaIbEED2Ev+0x1b)[0x423c79]
./QuadTreeConstruction(_ZNSt6vectorIbSaIbEED1Ev+0x18)[0x4237d2]
./QuadTreeConstruction(_Z22findLocalandGhostCellsRK8QuadTreeRK6ArrayVIiES5_iRS3_S6_+0x849)[0x41dbbd]
./QuadTreeConstruction(main+0xa32)[0x41ca49]
/lib/libc.so.6(__libc_start_main+0xfe)[0x7f38762bcd8e]
./QuadTreeConstruction[0x41b029]

My code is valgrind clean up to the some errors that are internal to mpi library (I use OpenMpi and I have seen them many times before but they have never been an issue; see http://www.open-mpi.org/faq/?category=debugging#valgrind_clean). I do not have any problem when I am running in serial.

I have been able to track down the problem to a SIGABORT system call using gdb and here is the stack when the code breaks:

0   raise   raise.c 64  0x7f4bd8655ba5  
1   abort   abort.c 92  0x7f4bd86596b0  
2   __libc_message  libc_fatal.c    189 0x7f4bd868f65b  
3   malloc_printerr malloc.c    6283    0x7f4bd86996d6  
4   __gnu_cxx::new_allocator<unsigned long>::deallocate new_allocator.h 95  0x423f04    
5   std::_Bvector_base<std::allocator<bool> >::_M_deallocate    stl_bvector.h   444 0x423e72    
6   std::_Bvector_base<std::allocator<bool> >::~_Bvector_base   stl_bvector.h   430 0x423c79    
7   std::vector<bool, std::allocator<bool> >::~vector   stl_bvector.h   547 0x4237d2    
8   findLocalandGhostCells  mpi_partition.cpp   249 0x41dbbd    
9   main    mpi_partition.cpp   111 0x41ca49    

This sounds like a memory corruption but I have absolutely no clue what is causing it. Basically the code breaks inside a function that looks something like this:

void findLocalandGhostCells(){
    std::vector<bool> foo(fooSize,false);

    // do stuff with foo; nothing crazy -- I promise

    return;
}

Anyone has any idea what I should be doing now? :(

Upvotes: 1

Views: 327

Answers (1)

user1192878
user1192878

Reputation: 734

If you are quite sure that vector operation itself is correct and non-crazy, try tracing the members of your vector step by step. It's possible that some of your other operations corrupted your memory blocks of vector. For example, a memcpy that invaded memory of vector.

Upvotes: 1

Related Questions