任何人都可以帮我看看这段代码有什么问题吗?

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 设为全局变量并在

之后释放它