问题描述
#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()中分配的内存?
解决方法
好的,你动态分配了 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 设为全局变量并在之后释放它