Seite 1 von 1

Embedding Python in C (Py_DECREF)

Verfasst: Freitag 16. Oktober 2009, 09:47
von Maple99
Moin,

ich habe mal eine Frage. Ich habe mir eine kleine Klasse in Python geschrieben, die mir eine XML-Datei einliest und daraus ein Dictionary erzeugt. Diese Klasse habe ich jetzt in C verwendet. Ich laufe dort dann mit einem Iterator durch das Dictionary und hole mir wie folgt die Daten in eine C-Variable

Code: Alles auswählen

char * cVar;
PyObject * pVar;
...
pVar =  PyDict_GetItem(values, key);
PyArg_Parse(pVar, "s", &cVar);          
...
Soweit so gut. Klappt auch alles. Ich füge cVar nachher in einen Baum ein um damit weiter zu arbeiten und jetzt kommt mein Problem.
Mein Verständnis der Funktion PyArg_Parse war so das hier aus dem Python-Object ein neuer! (irgendwo wird ein malloc durchgeführt) String erstellt wird. Dies scheint aber wohl nicht gemacht zu werden, da wenn ich nach dem "PyArg_Parse(pVar, "s", &cVar)" ein Py_DECREF(pVar) ausführe, bekomme ich ein Segmentation fault, wenn ich wieder auf meine Baumstruktur zugereife. Ich vermute das es daran liegt das eben pVar und cVar auf einen Speicherbereich zeigen und ein free auf pVar sich somit auch auf cVar auswirkt.
Jetzt also die eigentliche Frage. Ist das so? Was macht denn PyArg_Parse() intern wirklich? Kann mir da jemand einen Tip geben?? Vielen vielen Dank im Voraus.

Gruß

Jonny

Verfasst: Freitag 16. Oktober 2009, 13:20
von BlackJack
@Maple99: Wenn ich das richtig sehe darfst Du auf `pVar` gar kein `Py_DECREF()` aufrufen, weil Dir das Objekt nicht gehört. PyDict_GetItem() gibt eine "borrowed reference" zurück.