2013-09-24 43 views
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)); 

我收到分段错误,我不知道为什么!我看不出有什么问题。有人知道吗?

谢谢!

+0

如果'row'变量不能是会发生什么分配呢? – Mauren

+0

当我尝试分配时,我收到一个段错误。但是,当我分配列表的第二个节点时发生了这种情况。 –

回答

2

您没有为组员分配内存,但你用它来存储数据:

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

的结果你在随机地址破坏内存

+0

对不起,但我不明白... –

+0

你分配内存的aux-> next_line =(row *)malloc(sizeof(Row));但是aux-> cell呢? – AnatolyS

+0

那么,我如何分配char **? –