c - 动态分配 2 个指针时出错

标签 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 部分有关,但我不明白到底发生了什么。

感谢您的回答。

最佳答案

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

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

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

关于c - 动态分配 2 个指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44087807/

相关文章:

C - `0` 使用 malloc 出现特殊字符

c - a[j++] =++i 的等效表达式,不使用前置或后置增量运算符

c - 调整二维动态分配表大小时出现段错误

free() 上损坏的双链表

C 从结构体数组中释放内存

c++ - 如何用C/C++读取/恢复大数据文件(SEGY格式)?

c - 功能故意有一个高 cpu 负载?

c - 有没有一种方法可以可靠地分配与先前释放的 block 相同的内存块,然后访问先前在其中的内容?

C - 如果矩阵大于 5x5,矩阵输入函数会出现运行时错误,但代码中没有定义大小

C malloc() 在 linux 上抛出错误,而不是在 mac 上