C 动态分配2个指针时出错
在处理malloc函数时,我遇到了一些我无法理解的有点奇怪的事情 我声明了2个指针,并为它们分配了内存,如下所示:C 动态分配2个指针时出错,c,malloc,free,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); prin
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);
你打了malloc
一次,为什么你认为你需要free
两次?user.username=user.password=malloc(50)代码>-一次分配,两次免费
s-一个问题。问题二-user.username
和user.passbrow
将指向同一个位置!它不是为这两个变量调用malloc吗?不,它不是。@EdHeal因为它指向同一个位置,为什么scanf的第二部分(user.password)不会删除第一部分(user.username)中写入的内容?