2017-08-09 1 views
0

Angenommen habe ich eine C-Struktur wie dieseSWIG Speicherproblem Array innerhalb einer Struktur der Zuweisung

struct foo { 
    int sz; 
    struct bar **arr; 
}; 

In meiner SWIG Datei, verwende ich „carrays.i“ mir zu geben, die Kontrolle über das Array innerhalb dieser Struktur. Hier verwende ich

%module mdl 
%include "carrays.i" 
%array_functions(struct bar*, barArray) 

Dann reserviere ich Speicher für dieses Array in Python.

a = mdl.foo() 
a.arr = mdl.new_barArray(sz) 

Meine Frage ist, sollte ich die Erinnerung an die zugeordnete Array frei von

mdl.delete_barArray(a.arr) 

Aufruf, bevor ich die aktuelle Funktion zu verlassen, oder SWIG wird dies automatisch für mich tun, so brauche ich nicht sich darum kümmern?

Antwort

0

Sie müssen löschen aufrufen, wenn das Array nicht mehr benötigt wird. Wenn Sie es nicht tun, bevor die foo Objektreferenzzählung auf Null geht und zerstört wird, haben Sie ein Speicherleck.

Verwandte Themen