2017-07-17 28 views
-2

假设我分配了一块动态内存,并且它是成功的。稍后,有可能这段内存不再属于用户。是否有可能确定用户是否仍拥有这块动态内存?即是否可以在运行时确定谁拥有一段动态内存?

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

int main(){ 
    int* ptr = malloc(sizeof(int)); 

    /* ... ptr may have been freed ... */ 

    belongToUser(ptr); /* <- some sort of check? */ 
} 
+1

如果你想知道指针是否已经被释放,只需在释放指针后将它设置为NULL即可。稍后,如果它是'NULL',那么你知道它已经被释放。 – muXXmit2X

+0

简答:不,你不能这样做。你需要跟踪你分配的内存。一旦通过'malloc'分配的指针被释放,它就会永远消失。 –

+0

除非你释放它,否则该对象属于该过程。你什么意思? – Olaf

回答

0

有一个(既不干净也不安全)的可能性进行检查:

  1. 注册的信号处理程序SIGSEGV
  2. 访问存储器
  3. 返回,如果信号处理程序是没有映射运行,否则映射

如前所述,我绝不会建议检查,但要编写C程序rem烬(pointer = NULL)。

+1

由于没有提到平台,信号和处理程序可能完全不存在,所以稍有偏离主题的答案 – Ctx

+0

您说得对,这只是这种方法的一个缺点。但是,afaik,它是唯一的一个。 – xanoetux

+0

这是一个非常简洁的答案@xanoetux! – Miket25

相关问题