鱼C论坛

 找回密码
 立即注册
查看: 988|回复: 5

[已解决]运行后这段代码,为啥我的vs编译器显示free前后没有变化??

[复制链接]
发表于 2020-3-30 11:09:02 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<stdlib.h>
int main()
{
        int* ptr = NULL;
        ptr = (int*)malloc(sizeof(222));
        if (ptr == NULL)
        {
                printf("内存分配失败!\n");
                exit(1);
        }
        printf("before free,ptr=%p\n", ptr);
        free(ptr);
        printf("after free,ptr=%p\n",ptr);
        return 0;
最佳答案
2020-4-3 12:00:21
1024-web1 发表于 2020-4-2 19:25
理论上是这样的课上说过,但是我释放后还是原来的数。没有变,而且每一次运行的结果都不一样,不信你试试 ...
没有释放之前,该空间一直归本程序使用,
释放掉之后,对应的空间可以被其他程序使用,之后再对该空间进行访问,可能就不是原来的值了。


注意我使用的词,是“可能不是原来的值”。  也有可能还没有变化

举个例子吧
就像是老师去教室上课,语文老师(相当于你的程序)在了这间教室(访问的空间单元)上课,下课后没有擦黑板就走了。过了一会儿,你再去这间教室看的时候,黑板上可能还是语文老师写的东西,也可能有其他老师(另外的程序)在这间教室上过课,改掉了黑板的内容。
你这刚刚下课,就再去看黑板肯定没有变。但是具体什么时候变,那就看教务处(程序调度管理进程)的安排了,安排了其他课程,那么就变了,一直没安排,可能就会存在的时间比较长。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-30 11:18:30 | 显示全部楼层
而且每次运行输出ptr的结果都不一样,和上课小甲鱼老师讲的不一样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 12:18:29 | 显示全部楼层
free()只是将malloc()函数申请的空间释放掉,并不能将指针置空,指针的指向还是之前的,并不会改变
没有释放之前,该空间一直归本程序使用,
释放掉之后,对应的空间可以被其他程序使用,之后再对该空间进行访问,可能就不是原来的值了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-2 19:25:25 | 显示全部楼层
sunrise085 发表于 2020-3-30 12:18
free()只是将malloc()函数申请的空间释放掉,并不能将指针置空,指针的指向还是之前的,并不会改变
没有释 ...

理论上是这样的课上说过,但是我释放后还是原来的数。没有变,而且每一次运行的结果都不一样,不信你试试这是源代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
        int* ptr = NULL;
        ptr = (int*)malloc(sizeof(int));
        printf("before free,ptr=%p\n", ptr);

        if (ptr == NULL)
        {
                printf("内存分配失败!\n");
                exit(1);
        }
        printf("before free,ptr=%p\n", ptr);
        free(ptr);
        printf("after free,ptr=%p\n",ptr);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-3 12:00:21 | 显示全部楼层    本楼为最佳答案   
1024-web1 发表于 2020-4-2 19:25
理论上是这样的课上说过,但是我释放后还是原来的数。没有变,而且每一次运行的结果都不一样,不信你试试 ...
没有释放之前,该空间一直归本程序使用,
释放掉之后,对应的空间可以被其他程序使用,之后再对该空间进行访问,可能就不是原来的值了。


注意我使用的词,是“可能不是原来的值”。  也有可能还没有变化

举个例子吧
就像是老师去教室上课,语文老师(相当于你的程序)在了这间教室(访问的空间单元)上课,下课后没有擦黑板就走了。过了一会儿,你再去这间教室看的时候,黑板上可能还是语文老师写的东西,也可能有其他老师(另外的程序)在这间教室上过课,改掉了黑板的内容。
你这刚刚下课,就再去看黑板肯定没有变。但是具体什么时候变,那就看教务处(程序调度管理进程)的安排了,安排了其他课程,那么就变了,一直没安排,可能就会存在的时间比较长。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 09:14:27 | 显示全部楼层
sunrise085 发表于 2020-4-3 12:00
注意我使用的词,是“可能不是原来的值”。  也有可能还没有变化

举个例子吧

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 18:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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