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

时间:2021-06-03 10:06:40

标签: c pointers cs50 custom-function

#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;
}
<块引用>

输出:ferf 你好,!!! //namefunct 不返回 tmp_name 如何释放namefunct()中分配的内存?

1 个答案:

答案 0 :(得分:0)

好的,你动态分配了 10 个字节。然后让“name”变量(一个字符指针)指向那个动态分配的块。然后创建一个字符指针,指向“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 设为全局变量并在之后释放它

相关问题