segfault in extension module

Nat Echols echols at uclink.berkeley.edu
Thu Dec 4 00:02:40 EST 2003


> Post some code.

may god have mercy on my soul:

#include <Python.h>
#include "nw.h"


static PyObject *nw_align (PyObject *self, PyObject *args) {
    char *seq1, *seq2, *mfile;
    char *out1, *out2, *match;
    int penalty, status, score;
    PyObject *results;

    if (! PyArg_ParseTuple(args, "sssi", &seq1, &seq2, &mfile, &penalty)) {
        return NULL;
    }

    status = nw(seq1, seq2, mfile, penalty, &out1, &out2, &match, &score);

    if (status == -1) {
        PyErr_NoMemory();
        return NULL;
    }

    results = Py_BuildValue("(sssi)", out1, out2, match, score);
    return results;
}

static PyMethodDef nwMethods[] = {
    {"align",  nw_align, METH_VARARGS,
     "Perform Needleman-Wunsch alignment of two protein sequences."},
    {NULL, NULL, 0, NULL} /* This is required!  No idea why. */
};

void initnw (void) {
    (void) Py_InitModule("nw", nwMethods);
}

This is just the wrapper; the function that it calls is defined such:
int nw (char *seq1, char *seq2, char *matrixfile, int penalty,
    char **_out1, char **_out2, char **_match, int *_score);
(I can supply this too, but I already know this works fine in a standalone
C program.)

In Python, I simply do this:
(out1, out2, match, score) = nw.align(seq1, seq2, "BLOSUM62", 0)

This is it; should be simple to fix, no?




More information about the Python-list mailing list