I recently started learning C since I want to be able to write Python 
extension modules. In fact, there is no need for it, but I simply want 
to try something new ...

I tried to implement the bubblesort algorithm in C and to use it in 
python; bubblesort.c compiles fine, but whenever I want to import the 
modul and call the function I get a segmentation fault. This is what the 
code looks like:

static PyObject *py_bubblesort(PyObject *self, PyObject *args) {
        PyObject *seq = NULL, *item, *newseq = NULL;
        int seqlen, i;
        
        if(!PyArg_ParseTuple(args, "O", &seq)) {
                return NULL;
        }
        seq = PySequence_Fast(seq, "argument must be iterable");
        if(!seq) {
                return NULL;
        }
        seqlen = PySequence_Fast_GET_SIZE(seq);
        int list[seqlen];
        for (i = 0; i <= seqlen; i++) {
                item = PySequence_Fast_GET_ITEM(seq, i);
                list[i] = item;
        }
        bubblesort(list, seqlen);
        newseq = PyList_New(seqlen);
        if(!newseq) {
                return NULL;
        }
        for(i = 0; i < seqlen; i++) {
                PyList_SetItem(newseq, i, list[i]);
        }
                        
        return newseq;

bubblesort(int list[], int seqlen) is doing the actual job and it is 
working.

What did I do wrong? As I am quite new to C, I probably made many 
mistakes, so please feel free to correct me.

Cheers,
Fabian
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to