下北泽的天使 发表于 2023-8-30 16:10:55

第二行代码打印的是“After free, ptr = 0x8b23008”为什么

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
      int *ptr = NULL;

      ptr = (int *)malloc(sizeof(int));
      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;
}

isdkz 发表于 2023-8-30 16:11:47

在这段代码中,首先我们声明了一个指针变量ptr,并将其初始化为NULL。然后我们使用malloc函数动态分配了一个int类型的内存空间,并将其地址赋值给ptr。如果内存分配失败,我们将打印一条错误消息并退出程序。

在打印"Before free, ptr = %p"这行代码之后,我们使用free函数释放了ptr指向的内存空间。然而,需要注意的是,free函数只是释放了内存空间,但并没有改变ptr的值。因此,打印"After free, ptr = %p"这行代码仍然会输出ptr指向的地址。

需要注意的是,虽然ptr的值没有改变,但是已经释放的内存空间不能再访问,因为它已经被操作系统回收。因此,在释放内存后,访问ptr指向的内存空间是不安全的,可能会导致程序崩溃或产生未定义的行为。
页: [1]
查看完整版本: 第二行代码打印的是“After free, ptr = 0x8b23008”为什么