鱼C论坛

 找回密码
 立即注册
查看: 1110|回复: 7

我在char*G..函数结束后*p就会释放掉,为啥malloc(100)仍然有效

[复制链接]
发表于 2022-3-6 01:21:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include"stdio.h"
#include"stdlib.h"

char* GetMemory(char *p)
{
        p = malloc(100);
        return p;
}
void Text()
{
        char *str = NULL;
        str = GetMemory(str);
        strcpy(str, "hello,world");
        printf(str);
        free(str);
        str = NULL;
}
void main()
{
        Text();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-6 01:26:33 | 显示全部楼层
本帖最后由 mingshaox 于 2022-3-6 01:29 编辑

#include"stdio.h"
#include"stdlib.h"

char* getMemory()
{
        char p[] = "hello,world!"
        return p;
}
void Text()
{
        char *str = NULL;
        str = GetMemory();
        printf(str);
}
void main()
{
      Text();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 01:30:29 | 显示全部楼层
此刻
return(p);分函数结束后内容却已更改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 07:22:47 From FishC Mobile | 显示全部楼层
mingshaox 发表于 2022-3-6 01:30
此刻
return(p);分函数结束后内容却已更改

不知道你要问①楼的代码还是要问②楼的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 07:27:48 | 显示全部楼层
也不是静态数组,谁告诉你函数结束自动释放?最多程序结束后系统回收
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 09:05:33 | 显示全部楼层
函数释放掉的是&p这个地址,不是*p
函数的返回值还保存在eax寄存器中,通过“=”赋值到了str中,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-6 09:16:14 | 显示全部楼层
函数内有值,函数外为0
PT}9U2MX~K)DV7HREAIY4F5.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 13:58:53 | 显示全部楼层
#include"stdio.h"
#include"stdlib.h"

char* GetMemory()
{
        char p[] = "hello,world!";
        return p;
}
void Text()
{
        char *str = NULL;
        str = GetMemory();
        printf(str);
}
void main()
{
      Text();
}

岨.Press any key to continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 15:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表