【发布时间】:2012-10-02 19:01:40
【问题描述】:
我有一个表示表格中一行的结构:
typedef struct {
char *a;
char *b;
} row;
我有一个函数可以根据 db 数据初始化该行并返回指向它的指针
row* get_row(dbrow d) {
row *r = malloc(sizeof(row));
r->a = malloc(5);
strcpy(r->a, d.a);
r->b = malloc(5);
strcpy(r->b, d.b);
return r;
}
最后,我有一个以row **rows 为参数的函数:
void get_rows(row **rows) {
...
rows = malloc(rowNumber * sizeof(row*));
int i;
for (i = 0; i < rowNumber; i++) {
rows[i] = get_row(dbrow);
}
}
get_row 按预期工作并返回一个指向有效行结构的指针,但 gdb 显示 rows[0] (以及所有其他)永远不会获得新值,也就是说,它总是指向同一个地址,几乎就像rows[i] = get_row(dbrow) 行不存在。
【问题讨论】:
-
rowNumber来自哪里?你能把你的整个代码贴出来吗? -
rowNumber 被初始化为 1。周围的代码处理数据库访问,有点乱,它可以工作,而且确实对显示的代码有影响。指针分配之前的所有内容都可以正常工作。