At Wednesday 24/1/2007 22:06, john g wrote:

i have a memory leak issue with extension function that im working on. it reads data from a binary file into a stl vector then creates a new list to pass back to the python interface. the function works the first 1021 times but then gives a segmentation fault (core dumped). heres the business part of the code:


//read data
    vector<float> data;
    float temp;


    for(int x=0;x<np*2;x++)
    {
        fread(&temp,sizeof(float),1,datfil);
        data.push_back(temp);
    }


    //convert vector to list
    PyObject *newlist = PyList_New(np*2);
    PyList_SetItem(newlist, 0,PyFloat_FromDouble(data[0]));
    for(int x=0;x<np*2;x++)
    {
        PyList_SetItem(newlist, x,PyFloat_FromDouble(data[x]));
    }






    //send back list
    return newlist;

You have to check for possible errors. And you don't need to build the C++ vector, just use PyList_SET_ITEM on each value as you read it. (_SET_ITEM because it's a new, empty, list). This is how I'd do that (untested):

   float temp;
    PyObject *newlist;

    newlist = PyList_New(np*2);
    if (newlist == NULL)
        return NULL;
    for(int x=0;x<np*2;x++)
    {
        fread(&temp,sizeof(float),1,datfil);
// fread could fail, you should do some error handling here, search the python
        // sources for examples; possibly setting an exception and "goto err"
        PyList_SET_ITEM(newlist, x, PyFloat_FromDouble(temp));
    }
    if (PyErr_Occurred()) {
        goto err;
    }
    return newlist;
err:
    Py_DECREF(newlist);
    return NULL;



--
Gabriel Genellina
Softlab SRL

        

        
                
__________________________________________________ Preguntá. Respondé. Descubrí. Todo lo que querías saber, y lo que ni imaginabas, está en Yahoo! Respuestas (Beta). ¡Probalo ya! http://www.yahoo.com.ar/respuestas
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to