[petsc-users] Memory leak when combining PETSc-based vectors and boost::odeint

Matthew Knepley knepley at gmail.com
Thu Mar 31 08:35:28 CDT 2022


On Thu, Mar 31, 2022 at 9:01 AM Roland Richter <roland.richter at ntnu.no>
wrote:

> Hei,
>
> Thanks for the idea! I added a simple std::cout for both constructor and
> destructor, and found out that my destructor is called multiple times,
> while the constructor is called only once. This could explain the error
> (double free), but I do not know why segfault is thrown even though I
> explicitly check if the vector has been used. Are there explanations for
> that?
>
Run with -start_in_debugger and get the stack trace when it faults. Right
now, I have no idea where it is faulting.

  Thanks,

    Matt


> Regards,
>
> Roland Richter
> Am 31.03.22 um 12:14 schrieb Matthew Knepley:
>
> On Thu, Mar 31, 2022 at 5:58 AM Roland Richter <roland.richter at ntnu.no>
> wrote:
>
>> Hei,
>>
>> For a project I wanted to combine boost::odeint for timestepping and
>> PETSc-based vectors and matrices for calculating the right hand side. As
>> comparison for both timing and correctness I set up an armadillo-based
>> right hand side (with the main-function being in *main.cpp*, and the
>> test code in *test_timestepping_clean.cpp*)
>>
>> In theory, the code works fine, but I have some issues with cleaning up
>> afterwards in my struct *Petsc_RHS_state_clean*. My initial intention
>> was to set up all involved matrices and vectors within the constructor, and
>> free the memory in the destructor. To avoid freeing vectors I have not used
>> I initially set them to *PETSC_NULL*, and check if this value has been
>> changed before calling *VecDestroy().*
>>
> You do not need to check. Destroy() functions already check for NULL.
>
>> However, when doing that I get the following error:
>>
>> [0]PETSC ERROR:
>> ------------------------------------------------------------------------
>> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation,
>> probably memory access out of range
>> [0]PETSC ERROR: Try option -start_in_debugger or
>> -on_error_attach_debugger
>> [0]PETSC ERROR: or see https://petsc.org/release/faq/#valgrind
>> [0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS
>> X to find memory corruption errors
>> [0]PETSC ERROR: configure using --with-debugging=yes, recompile, link,
>> and run
>> [0]PETSC ERROR: to get more information on the crash.
>> [0]PETSC ERROR: --------------------- Error Message
>> --------------------------------------------------------------
>>
>> If I comment out that code in ~Petsc_RHS_state_clean(), the program runs,
>> but will use ~17 GByte of RAM during runtime. As the memory is not used
>> immediately in full, but rather increases during running, I assume a memory
>> leak somewhere. Where does it come from, and how can I avoid it?
>>
> It must be that your constructor is called multiple times without calling
> your destructor. I cannot understand this code in order
> to see where that happens, but you should just be able to run in the
> debugger and put a break point at the creation and
> destruction calls.
>
>   Thanks,
>
>       Matt
>
>> Thanks!
>>
>> Regards,
>>
>> Roland Richter
>>
>>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
>
>

-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220331/de1837b3/attachment-0001.html>


More information about the petsc-users mailing list