大马强 发表于 2022-3-24 23:35:04

对于内存释放的疑问

比如下边代码
是不是free(b)语句多余了
我想的是a,b都指向了同一个地址,释放a相当于把b也一起释放了

#include <iostream>

using namespace std;

int main()
{
        int* a = (int*)malloc(sizeof(int));
        int* b = (int*)malloc(sizeof(int));
        *a = 1;
        *b = 2;
       
        a = b;
       
        free(a);
        free(b);
        return 0;
}

ba21 发表于 2022-3-24 23:49:28

确实多余,不过你还是要一个中间指针来释放原来的b

大马强 发表于 2022-3-25 00:04:09

ba21 发表于 2022-3-24 23:49
确实多余,不过你还是要一个中间指针来释放原来的b

咋写呢?
我感觉b的不是也一起释放了吗

ba21 发表于 2022-3-25 00:17:44

大马强 发表于 2022-3-25 00:04
咋写呢?
我感觉b的不是也一起释放了吗

                int *temp;
      int* a = (int*)malloc(sizeof(int));
      int* b = (int*)malloc(sizeof(int));

      *a = 1;
      *b = 2;
      
                temp = a; // 保存 a 的地址
      a = b; // a 现在存的是 b的地址
      
      free(a);
      free(temp);

      return 0;

jackz007 发表于 2022-3-25 00:23:51

      两次执行 malloc() 分配了 2 块内存空间,其句柄分别对应于指针变量 a 和 b,使用完毕后,应该通过 free(a)、free(b) 来释放这两块内存空间。但是,在内存空间还没有得到释放的时候,执行了 a = b,那么,句柄 a 就被丢失掉了,就是说,句柄 a 对应的内存空间因为丢掉了内存地址而无法访问,当然,也无法进行释放。

赚小钱 发表于 2022-3-25 07:12:19

free a
a=b
free b
页: [1]
查看完整版本: 对于内存释放的疑问