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!