-1

スパース行列を保持するために 2 次元のリンク リストを作成しようとしています。次のコードを記述して、適切な場所に新しいノードを挿入します。

void insertNewNode(node **rowHead, node **columnHead, int value, int row, int column) { 
    //Get to the correct position in the column linked list
    if (*columnHead == NULL) {
        *columnHead = malloc(sizeof(node));
    } else {
        while((*columnHead)->nextColumn != NULL && (*columnHead)->nextColumn->row < row)
            *columnHead = (*columnHead)->nextColumn;
    }

    //Get to the correct position in the row linked list.
    if (*rowHead == NULL) {
        *rowHead = malloc(sizeof(node));
    } else {
        while((*rowHead)->nextRow != NULL && ((*rowHead)->nextRow->column < column))
            *rowHead = (*rowHead)->nextRow;
    }

    node *newNode = malloc(sizeof(node));
    newNode->column = column;
    newNode->row = row;
    newNode->value = value;

    (*columnHead)->nextColumn = newNode;
    (*rowHead)->nextRow = newNode;
}

何らかの理由で最後の行:

(*rowHead)->nextRow = newNode;

EXC_BAD_ACCESS エラーを引き起こしていますが、前の行はそうではありません。その理由は完全にはわかりません。これが発生する理由を誰でも見ることができますか?

4

1 に答える 1

1

行データの割り当て/維持方法に関するプログラムの別の場所に問題がある可能性があり、列データはたまたま問題ありません。rowHead の値を調べましたか? おそらくそれはnullまたはガベージ値です...その後、そこからさかのぼって、それがどのように起こっているかを理解できます。

于 2013-01-25T17:49:09.217 に答える