【发布时间】:2016-12-08 20:02:03
【问题描述】:
我的这部分代码是关于注册的。
我只能注册一次,下次程序停止时。
有什么问题?
while (1) { /*usercounter initialized with 0*/
printf("enter your order:\n");
gets(buffer);
order = strtok(buffer, " ");
if (strcmp(order, "signup") == 0) {
usercounter++;
if (usercounter > 50) {
username=realloc(username,usercounter*sizeof(*username));
password=realloc(password, usercounter*sizeof(*password));
}
username[(usercounter - 1)] = (char *)malloc(50*sizeof(char));
strcpy(username[usercounter - 1], strtok(NULL, " "));
password[(usercounter - 1)] = (char *)malloc(50*sizeof(char));
strcpy(password[usercounter - 1], strtok(NULL, "\n"));
free(buffer);
continue;
}
}
【问题讨论】:
-
free(buffer);!? -
我在这里看到的都是非常危险的代码和漏洞。我对 C 语言不够精通,无法在不引入其他错误的情况下涵盖修复程序,但是在 free 之后有一个用途,gets() 问题,而且我看不到您管理(计数)引用的任何方式,因此泄漏和错误很有可能发生。
-
需要查看更多:变量声明、使用的输入等
标签: c malloc access-violation realloc