Thank you for your reply!
And I've found that it's not the memory of the automaton not being freed,
but the containers acquired by 'aut.out(i)' not being freed in
'...something'.
This problem can be solved by using aut.out_iteraser(i).
So I'm just wondering why there are two methods for getting out edges, and
aut.out(i) doesn't allow erasure? And it seems that the aut.out(i) method
is used by default in the spot's code examples.
On Fri, Jan 28, 2022 at 12:30 AM Alexandre Duret-Lutz <adl(a)lrde.epita.fr>
wrote:
Yechuan Xia <xiaozi465(a)gmail.com> writes:
Hi, I'm building some automatons using
spot's python interface.
Simply, codes like:
for i in n:
temp_aut = spot.automaton(aut.to_str()) # copy an automaton
...something
del temp_aut
But I found that whenever it enters a new loop, the memory of the
automaton assigned to temp_aut is not freed. And it leads to a memory
overflow.
I thought this might be solved with 'delete temp_aut' in the C++
version spot, but in the python interface 'del temp' doesn't seem to
work.
Using "del temp_aut", or "temp_aut = None" should cause the
automaton's
destructor to be called, unless "...something" stores are reference to
that automaton somewhere.
Can you provide a test-case that demonstrates the problem?
I can't reproduce it from your example, trying something like:
for i in range(100):
newaut = spot.automaton(aut.to_str())
del newaut
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
I see that ru_maxrss is not growing.