当我搞乱 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/