PyList_Append gibt ständig segfaults ...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

irgendwo ist hier der Wurm drin:

Code: Alles auswählen

static PyObject *_iofq(PyObject *self, PyObject *args) {
  	PyObject * py_iofq = NULL;
        dummy_4 = NULL;
        /* snip, aber py_iofq wird nicht angerührt*/

        if (!(py_iofq = PyList_New(0)))
		return NULL;
        for (i=0; i < qlen-1; i++) {
                 dummy_4 = Py_BuildValue("i", 1);
    	          if (!dummy_4) return NULL;
    	          PyList_Append(py_iofq, dummy_4);
    	          Py_DECREF(dummy_4); dummy_4 = NULL; 
  	}
        /* snip */
Nach genau fünf Schleifendurchläufen bricht das Programm mit einem segfault in der PyList_Append-Zeile ab. Ich verstehe es nicht, weil der Code eigentlich genau so in einer anderen Funktion läuft.

Hat jemand Ideen?
Christian

PS Ist so natürlich nur TestCode zum Eindampfen des Problems. Eine Pythonliste mit lauter Einsen würde ich anders zu bauen wissen ;-).

edit: Präparation von py_iofq eingefügt
Zuletzt geändert von CM am Freitag 13. Juni 2008, 14:22, insgesamt 1-mal geändert.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

py_iofq sollte aber schon ein Listenobjekt sein, und nicht NULL...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ja, natürlich. Danke Dir! Das habe bei der Präparation des Beispiels schlicht vergessen. Gibt es aber im Code schon und ist jetzt auch im Beispiel nachgetragen.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

So, jetzt habe ich es endlich ... Einiges daraus gelernt:
  • - Python schluckt keine C unsigned long long (int) - was aber auch an gcc liegen kann.
    - dann hatte ich diesen Fehler gefunden und gestgestellt, dass u. U. (aufgrund eines Rechenfehlers) NANs entstehen können. Ich kapiere zwar nicht warum, aber auch das kann bei PyList_Append zu einem segfault führen.
    - und schließlich habe noch an einer Stelle Mist mit Pointer gebaut - hat zwar nichts mit dem hier geposteten Problem zu tun, aber ist auch ein Bug, den ich erst jetzt entdeckt habe.
Antworten