【问题标题】:Segfault in Linked List链表中的段错误
【发布时间】:2013-09-24 20:09:05
【问题描述】:

我有这个功能,我可以在其中获取数据库的数据并制作一个链表。列表的每个节点都是一行。

这是函数

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

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

谢谢!

【问题讨论】:

  • row变量分配失败会怎样?
  • 当我尝试分配时,我收到一个段错误。但是,当我分配列表的第二个节点时,就会发生这种情况。

标签: c linked-list segmentation-fault


【解决方案1】:

您没有为单元成员分配内存,但您使用它来存储数据:

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

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

【讨论】:

  • 你为 aux->next_line = (Row *) malloc(sizeof(Row)); 分配内存但是 aux->cell 呢?
  • 那么,我如何分配一个 char ** ?
  • aux->cell = malloc(sizeof(char*)*aux->total_cols);在你的循环之前 (col_atual = 0; col_atual total_cols; col_atual++)
猜你喜欢
  • 2012-02-09
  • 2021-09-10
  • 2012-11-06
  • 1970-01-01
  • 2013-10-21
  • 2012-06-12
  • 2020-09-10
  • 1970-01-01
相关资源
最近更新 更多