0

私は、データベースのデータを取得し、リンクされたリストを作成するこの機能を持っています。リストの各ノードは行です。

これが機能です

Row * fetch(Query* query)
{
    if (PQresultStatus(query->resultset) != PGRES_TUPLES_OK)
        return NULL;

    Row * row;
    row = (Row *) malloc(sizeof (Row));

    row->total_cols = PQnfields(query->resultset);
    int rows = PQntuples(query->resultset);

    int row_atual, col_atual;
    Row * aux;
    aux = row;

    for (row_atual = 0; row_atual < rows; row_atual++) {
        for (col_atual = 0; col_atual < aux->total_cols; col_atual++) {
            aux->cell[col_atual] = PQgetvalue(query->resultset, row_atual, col_atual);
        }
        aux->next_line = (Row *) malloc(sizeof(Row));
        aux = aux->next_line;
    }
    return row;
}

そして、これは構造体の行です:

typedef struct row {
    int total_cols;
    char ** cell;
    struct row * next_line;
} Row;

問題は、この時点に到達したときです。

aux->next_line = (Row *) malloc(sizeof(Row));

セグメンテーション違反が発生しましたが、理由がわかりません! 何が悪いのかわかりません。誰か知ってる?

ありがとう!

4

1 に答える 1

2

セル メンバーにメモリを割り当てませんでしたが、それを使用してデータを格納します。

aux->cell[col_atual] = ...;

その結果、ランダムなアドレスでメモリを台無しにします

于 2013-09-24T20:14:43.470 に答える