Das ist mir schon klar gewesen. Musste nur, wie geschrieben, an den Zeigefinger des Profs denken.
Das mit dem strukturierten Programmcode kommt so langsam glaube ich auch.

Eben nicht. Wenn Du PyList_Append() machst wird von der Liste eine neue Referenz auf das Objekt gespeichert, bei PyTuple_SET_ITEM() wird eine Referenz gestohlen. Ersteres kann also aus welchem Grund auch immer fehlschlagen (zum Beispiel weil die Liste nicht verlängert werden kann), zweiteres kann nie fehlschlagen, weil der Platz schon vorallokiert ist, deswegen ist es auch ein Makro, während ersteres eine Funktion ist.Warum ist bei nem Tuple das Setzen eines items nicht so fehlerkritisch, als bei einer Liste? Das Stehlen der Referenz habe ich doch analog auch bei der Liste.
Wenn der Referenzzähler vorher auf 1 war ist das Objekt nach dem Py_XDECREF unbrauchbar (also freigegeben). Deswegen ist auch der Referenzzähler nicht mehr zu gebrauchen (bzw. der Inhalt unsinnig, und nicht notwendigerweise 0).Hier zeigt sich, das der Referenzzähler des PyData vor dem XDECREF auf 1 steht und danach 14731456 aufweist. Wodurch ist das zu erklären?
Code: Alles auswählen
if( !( PyARB_Point = PyTuple_New(0) ) ) goto end_error;
Untersteh dich! Ich wills selber verstehen. Copy-Paste bringt mir da nicht so wirklich viel. - Aber Danke!Wenn Du umbedingt Listen brauchst kann ich auch Code dafür machen, der sieht aber dann nicht mehr ganz so schön kompakt aus. Wink
Das war nicht ganz richtig was ich da geschrieben hab, das ist mir aber erst jetzt aufgefallen, und es ist erstaunlich dass es anscheinend trotzdem lief, oder?Mein Prob liegt darin, das du nen neuen Tuple erzeugen kannst
Code: Alles auswählen
if( !( PyARB_Point = PyTuple_New(3) ) ) goto end_error;