我有一组用户。目前我的主要功能是通过输入两个名称来测试它,因此addUser函数将遍历两个案例。第一个值输入没有问题,并且在该行之前一直没有问题:
amigoNet->users[counter] = newUser;
然后第二个值落入第二个插槽,但用户[0]名称中的第一个变为类似:
S
@
我哪里出错了,为什么它能够以这种方式破坏第一个元素的价值?我无法修改User结构,但我可以更改AmNet。
这是包含用户列表的AmNet结构:
typedef struct User_struct {
const char *name;
Friends amigos;
} User;
用户结构:
typedef struct AmNet {
int size; // hashtable size?
User *front; // the first user
User *back; // the last user
User *users[]; // group of users in the net
}
将用户添加到的功能:
void addUser( const char *name ) {
User *newUser = malloc(sizeof(User));
newUser->name = name;
newUser->amigos = NULL;
// if amigonet users is empty
if (amigoNet->front == NULL) {
amigoNet->front = newUser;
amigoNet->users[0] = newUser;
}
else { // if amigonet users is not empty
int counter = 0;
int flag = 0;
// go through users until we have an empty spot
while (amigoNet->users[counter+1] != NULL) {
if (amigoNet->users[counter]->name == name) {
flag++;
}
counter++;
}
if (flag < 1) { // if it's a unique name
amigoNet->users[counter] = newUser;
amigoNet->users[counter]->name = name;
amigoNet->users[counter]->amigos = NULL;
amigoNet->back = amigoNet->users[counter];
}
}
}
AmNet实例在此处创建:
void create_amigonet(){
amigoNet = (struct AmNet *)malloc(sizeof(struct AmNet));
amigoNet->size = 0;
amigoNet->front = NULL;
amigoNet->back = NULL;
}
答案 0 :(得分:0)
问题在于:
amigoNet = (struct AmNet *)malloc(sizeof(struct AmNet));
它不为数组amigoNet->users
分配任何空间。你应该使用:
amigoNet = (struct AmNet *)malloc(sizeof(struct AmNet) + MAX_USERS*sizeof(struct User_struct *));
或类似的东西。请参阅C99中有关灵活阵列的文档。