c - 动态分配 2 个指针的错误



我遇到了一些有点奇怪的东西,当我弄乱malloc函数时,我无法理解。

我声明了 2 个指针并为它们分配了如下内存:

struct User {
    char *username, *password;
};
int main() {
    struct User user;
    user.username = user.password = malloc (50);
    scanf ("%s %s", user.username, user.password);
    printf ("%s %sn", user.username, user.password);
    free (user.username);
    free (user.password);
    return 0;

scanf()printf()一样完美运行。但是,当涉及到free()时,会出现错误。当我只释放两个指针中的一个时,不会发生错误。我知道这与代码的user.username = user.password部分有关,但我不明白到底发生了什么。

感谢您的回答。

值返回已分配的值。因此,在您的情况下,user.username und user.password 将指向相同的内存位置(malloc 返回的位置(。当您在它们上调用 free(( 时,同一位置被释放两次,这会导致错误。

尝试分配两个不同的内存块:

user.username = malloc (50);
user.password = malloc (50);

相关内容

  • 没有找到相关文章

最新更新