动态分配2个指针时出错

时间:2017-05-20 15:41:08

标签: c malloc free

我遇到了一些有点奇怪的事情,当我搞乱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 %s\n", user.username, user.password);

    free (user.username);
    free (user.password);

    return 0;

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

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

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

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

symlinks -d ./