【问题标题】:How can I save a string in a dynamic 2d array?如何将字符串保存在动态二维数组中?
【发布时间】: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


【解决方案1】:
free(buffer);

为什么使用它,它会导致未定义的行为,您正在释放静态内存。删除上面的语句。

休息很好。

【讨论】:

  • 你怎么知道buffer是静态内存?
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
相关资源
最近更新 更多