任何人都可以帮我看看这段代码有什么问题吗?
Can any one please help me what wrong with this code?
#include <stdio.h>
#include <stdlib.h>
char *namefunct(void);
int main(int argc, char *argv[])
{
printf("Hello, %s!!!\n", namefunct()); //namefunct is not returning tmp_name
}
char *namefunct(void)
{
char *name = malloc(sizeof(char) * 10);
scanf("%s", name);
char *tmp_name = name;
free(name);
return tmp_name;
}
OUTPUT: ferf Hello, !!!
//namefunct is not returning tmp_name
How can i free the memory which is allocated in the namefunct()?
好的,你动态分配10个字节。然后你使“名称”变量(一个字符指针)指向那个动态分配的块。然后你创建一个指向“name”指向的同一个动态分配块的字符指针。然后你 "free(name)" 释放了 "tmp_name" 也指向的块。 “name”和“tmp_name”都指向可能已被另一个程序接管的释放内存,本质上返回一个指向垃圾值的指针。我推荐这个:
#include <stdio.h>
#include <stdlib.h>
char* namefunct(void);
int main(int argc, char* argv[])
{
char* my_name = namefunct();
printf("Hello, %s!!!\n", my_name); //namefunct is not returning tmp_name
free(my_name);
return 0;
}
char* namefunct(void)
{
char* name = malloc(sizeof(char) * 10);
scanf("%s", name);
return name;
}
或者,就像@Siddhant 发布的那样,您可以将 name 设为全局变量并在
之后释放它
#include <stdio.h>
#include <stdlib.h>
char *namefunct(void);
int main(int argc, char *argv[])
{
printf("Hello, %s!!!\n", namefunct()); //namefunct is not returning tmp_name
}
char *namefunct(void)
{
char *name = malloc(sizeof(char) * 10);
scanf("%s", name);
char *tmp_name = name;
free(name);
return tmp_name;
}
OUTPUT: ferf Hello, !!! //namefunct is not returning tmp_name How can i free the memory which is allocated in the namefunct()?
好的,你动态分配10个字节。然后你使“名称”变量(一个字符指针)指向那个动态分配的块。然后你创建一个指向“name”指向的同一个动态分配块的字符指针。然后你 "free(name)" 释放了 "tmp_name" 也指向的块。 “name”和“tmp_name”都指向可能已被另一个程序接管的释放内存,本质上返回一个指向垃圾值的指针。我推荐这个:
#include <stdio.h>
#include <stdlib.h>
char* namefunct(void);
int main(int argc, char* argv[])
{
char* my_name = namefunct();
printf("Hello, %s!!!\n", my_name); //namefunct is not returning tmp_name
free(my_name);
return 0;
}
char* namefunct(void)
{
char* name = malloc(sizeof(char) * 10);
scanf("%s", name);
return name;
}
或者,就像@Siddhant 发布的那样,您可以将 name 设为全局变量并在
之后释放它