运行后这段代码,为啥我的vs编译器显示free前后没有变化??
#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; 而且每次运行输出ptr的结果都不一样,和上课小甲鱼老师讲的不一样啊 free()只是将malloc()函数申请的空间释放掉,并不能将指针置空,指针的指向还是之前的,并不会改变
没有释放之前,该空间一直归本程序使用,
释放掉之后,对应的空间可以被其他程序使用,之后再对该空间进行访问,可能就不是原来的值了。 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;
} 1024-web1 发表于 2020-4-2 19:25
理论上是这样的课上说过,但是我释放后还是原来的数。没有变,而且每一次运行的结果都不一样,不信你试试 ...
没有释放之前,该空间一直归本程序使用,
释放掉之后,对应的空间可以被其他程序使用,之后再对该空间进行访问,可能就不是原来的值了。
注意我使用的词,是“可能不是原来的值”。也有可能还没有变化
举个例子吧
就像是老师去教室上课,语文老师(相当于你的程序)在了这间教室(访问的空间单元)上课,下课后没有擦黑板就走了。过了一会儿,你再去这间教室看的时候,黑板上可能还是语文老师写的东西,也可能有其他老师(另外的程序)在这间教室上过课,改掉了黑板的内容。
你这刚刚下课,就再去看黑板肯定没有变。但是具体什么时候变,那就看教务处(程序调度管理进程)的安排了,安排了其他课程,那么就变了,一直没安排,可能就会存在的时间比较长。 sunrise085 发表于 2020-4-3 12:00
注意我使用的词,是“可能不是原来的值”。也有可能还没有变化
举个例子吧
非常感谢{:5_109:}
页:
[1]