bei mir stürzt Python ab: "python.exe has encountered a problem and needs to close ..."
und ich weiss nicht wie ich die Ursache dafür finden soll.
Wenn ich das Script schrittweise ausführe stürzt es bei der zweiten Iteration immer an der selben Stelle ab, lasse ich es normal laufen schafft es fünf Iterationen.
Ich kann erstmal so ohne weiteres leider kein Minimalbeispiel erstellen, da das Script mehrere Dateien und Extensions in einer bestimmten Verzeichnisstruktur benutzt.
Hat jemand eine Idee, wie man die Absturzursache lokalisiert?
Nachtrag: Es scheint wieder mit falsch freigegebenen Objekten zusammenzuhängen ("PyDECREF()").
Wenn ich alle auskommentiere läuft das Script.
Ich dachte nicht, dass ich mit den unten stehenden Funktionen bestehende Referenzen lösche.
Weiß jemand warum welche Referenzen nicht gelöscht werden dürfen?
Code: Alles auswählen
// assign the parameter-strings given in the 'floatParamDict' to their corresponding values
// and log them to the measurement-result-file
PyObject *SetFloatParam(PyObject* PyDict, int n_floatParam, floatTypePrm floatParam[], FILE* ResultFile){
PyObject *PyList = NULL, *PyKey = NULL;
char* key;
int i, j, size;
PyList = PyDict_Keys(PyDict);
size = PyList_GET_SIZE(PyList);
for (j = 0; j < size; j++){
PyKey = PyList_GetItem(PyList, j);
key = PyString_AsString(PyKey);
for (i = 0; i < n_floatParam; i++){
if (strcmp(key, floatParam[i].name) == 0){
*floatParam[i].value = ViReal64FromDict(PyDict, key);
fprintf(ResultFile, "\t%s = %f\n", key, (float)*floatParam[i].value);
PyDict_DelItem(PyDict, PyKey);
break;
}
}
//Py_DECREF(PyKey);
}
//Py_DECREF(PyList);
fprintf (ResultFile, "\n");
return PyDict;
}
void CheckForRest(PyObject *PyRetDict){
PyObject *PyList = NULL, *PyKey = NULL;
char* key;
int i, size;
PyList = PyDict_Keys(PyRetDict);
size = PyList_GET_SIZE(PyList);
for (i = 0; i < size; i++){
PyKey = PyList_GetItem(PyList, i);
key = PyString_AsString(PyKey);
PyObject_CallMethod(MsgDia(), "dispConfirm", "(ssi)", key, "Wrong or Unused Parameter", 0);
//Py_DECREF(PyKey);
}
PyDict_Clear(PyRetDict);
//Py_DECREF(PyList);
}