2013-09-24 5 views
0

У меня есть эта функция, где я получаю данные из базы данных, и я делаю связанный список. Каждый узел списка представляет собой строку.Segfault в связанном списке

Это функция

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)); 

я получил ошибку сегментации, и я не знаю почему! Я не вижу, что случилось. Кто-то знает?

Спасибо!

+0

Что произойдет, если 'row' переменная не может быть выделяется? – Mauren

+0

Когда я пытаюсь выделить, я получаю segfault. Но это произошло, когда я выделил второй узел списка. –

ответ

2

Вы не выделяет память для члена клетки, но использовать его для хранения данных:

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

в результате портите памяти по случайным адресам

+0

Извините, но я не понимаю ... –

+0

Вы выделяете память для aux-> next_line = (Row *) malloc (sizeof (Row)); но как насчет aux-> cell? – AnatolyS

+0

Итак, как я выделяю char **? –

Смежные вопросы