5 Stimmen

SWIG - Garbage Collection mit %newobject

In meinem C-Code habe ich die folgende Struktur:

typedef struct my_structure{
    char* str1;
    char* str2;
}MyStruct;

Und eine Funktion, die einen MyStruct-Zeiger zurückgibt:

MyStruct* foo();

Innerhalb von foo habe ich Speicher für MyStruct , str1 und str2 zugewiesen, wie folgt:

MyStruct* obj = malloc(sizeof(MyStruct));

obj.str1 = malloc(256);
obj.str2 = malloc(256);

Ich möchte foo von Python, Java, C# und PHP aus aufrufen, und ich möchte keine Speicherverluste in diesem Prozess haben.

Ich bin nicht sicher, ob das Schreiben:

%newobject foo;
MyStruct* foo();

garantiert, dass der Garbage Collector den Speicher sowohl für die Struktur als auch für die darin enthaltenen Strings freigibt.

Ich wollte den Aufrufer nicht dazu verpflichten, explizit Speicher für str1 und str2 freizugeben, da ich nach einer automatischen Möglichkeit der Speicherfreigabe gesucht habe. Ist dies möglich?

Muss ich in diesem Fall die Typkarte "newfree" verwenden?

Ich wäre Ihnen sehr dankbar, wenn Sie mir ein Beispiel dafür geben könnten, wie man dies am besten bewerkstelligt.

Danke!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X