2017-07-17 60 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

相關問題