C-API: A beginner's problem

Fabian Steiner lists at fabis-site.net
Sun Mar 19 09:50:02 EST 2006


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



More information about the Python-list mailing list