在下面的代碼中,我無法弄清楚爲什麼在添加2後運行dump_data()方法時,爲什麼我得到相同的輸出(即同名) (或更多)User_struct(使用不同的名稱)使用addUser()方法。動態分配動態分配的結構列表覆蓋
struct Friends_struct {
struct User_struct *this;
struct Friends_struct *next;
};
typedef struct Friends_struct *Friends;
typedef struct User_struct {
const char *name;
Friends amigos;
} User;
static User **userList; // global table of users
static int numUsers; // global number of users
static int tableSize; // global size of table
void create_amigonet() {
tableSize = INIT_TABLE_SIZE;
numUsers = 0;
userList = malloc(tableSize * sizeof(User *));
}
void addUser(const char *name) {
userList[numUsers] = malloc(sizeof(User));
userList[numUsers]->name = name;
userList[numUsers]->amigos = 0;
numUsers++;
if (numUsers == tableSize) {
tableSize += INIT_TABLE_SIZE;
User **moreUsers;
moreUsers = realloc(userList, tableSize * sizeof(User *));
userList = moreUsers;
}
}
void dump_data() {
for (int i=0; i<numUsers; i++) {
printf("%s; friends:", userList[i]->name);
}
printf("\n");
}
不同的.c文件:
void do_add(const char *name) {
addUser(name);
}
int main(void) {
create_amigonet();
do_add("Dan");
do_add("Jim");
dump_data();
}
如果這樣運行,輸出我希望會是這樣的
Dan; friends:
Jim; friends:
但我越來越
Jim; friends:
Jim; friends:
我如何/在哪裏覆蓋我的數據?
不編譯。當我修復編譯錯誤時,它按預期工作。 'userList [numUsers] - > amigos = 0;'是錯誤的。 amigos是一個'Friends'結構,你不能給它賦值0.另外dumpData或dump_data? – 2014-11-08 22:47:13
1)userList [numUsers] - > amigos = 0;' - >'userList [numUsers] - > amigos =(Friends){0};'2)'void dump_data(){' - > void dumpData (){'然後[DEMO](http://ideone.com/lDSs6j) – BLUEPIXY 2014-11-08 22:50:58
也許,使用來自控制檯的輸入不同於發佈的代碼。 – BLUEPIXY 2014-11-08 22:56:40