2011-03-14 58 views
1

我已經在將要被從進展4GL應用程序調用某些C語言函數在努力,我發現自己有以下疑點:進展4GL調用C函數

C函數使用的malloc動態分配一個字符數組,並且想法是分配該內存的指針將返回到最初發送MEMPTR數據類型以保存C方法結果的Progress 4GL進程。

基本上,來自Progress的MEMPTR必須發送到C函數以「接收」C生成的數組,並在範圍從de C函數返回時使用它(C方法「填充的兩種語言之間的引用傳遞「MEMPTR進度變量)。

我的問題是:

當進度過程完成和MEMPTR變量「釋放」,它釋放在C函數分配的內存以及malloc的?

如果我釋放在C函數我猜進展過程將收到的垃圾數據的malloc分配的內存,這是正確的嗎?

感謝您的時間和幫助。

問候。

回答

3

4GL/ABL: How to Call WIN32 API Function: GetLongPathName

進展4GL不管理內存爲您服務。您需要提供一種方法來釋放/釋放內存。

是的,如果你曾經訪問免費()'d內存,訪問它是不確定的 - 它可能會崩潰,它可能會給你垃圾數據,或者你的程序可以繼續隆隆遠沒有錯誤。

聲明:我正在進行的工作。

0

一般來說,在任何跨語言編程環境,這是一個壞主意,有或期望一種語言解除分配由其他分配的內存。分配資源的語言(如內存)應該有一個相應的調用來在客戶端完成時釋放資源。

下,在特定的沒有垃圾收集,所以由它分配的任何內存必須手動釋放。

有一個例外。在大多數(非嵌入式)平臺上,當應用程序終止時,所有分配的資源將被回收。因此,如果分配是一次性啓動類型的事情(而不是在一個循環或某物中完成),那麼在程序退出時讓操作系統回收它通常是可以的,而不必擔心手動執行操作。