質問

私は、進行状況4GLアプリケーションから呼び出されるいくつかのC言語関数で作業してきましたが、次の疑問がありました。

C関数はMALLOCを使用して一連のcharを動的に割り当てます。アイデアは、そのメモリを割り当てるポインターが、元々MEMPTRデータ型を送信してCメソッドの結果を保持するProgress 4GLプロセスに返されるということです。

基本的に、進行状況からのMEMPTRをC関数に送信して、c生成されたアレイを「受信」し、スコープがDE C関数から戻ったときにそれを使用する必要があります(CメソッドがMEMPTRの進行状況を「埋める」両方の言語間で参照によるパス変数)。

私の質問は次のとおりです。

進行状況プロセスが終了し、MEMPTR変数が「解放」されると、C関数にもMALLOC割り当てられたメモリが解放されますか?

C関数でMalloc割り当てられたメモリを解放した場合、進行状況プロセスがゴミデータを受信すると推測しています、これは正しいですか?

お時間をいただきありがとうございます。

ご挨拶。

役に立ちましたか?

解決

4GL/ABL:Win32 API関数を呼び出す方法:getLongPathname

Progress 4GLはあなたのためにそのメモリを管理しません。そのメモリを扱う/解放する方法を提供する必要があります。

はい、free() 'dメモリにアクセスした場合、それへのアクセスは未定義になります - クラッシュする可能性があります。ガベージデータが得られる場合があります。または、プログラムがエラーなしで追い払われ続ける可能性があります。

免責事項:私は進歩のために働いています。

他のヒント

一般的に、言語間プログラミング環境では、ある言語が他の言語が割り当てるメモリを扱うことを扱うか期待することは悪い考えです。リソース(メモリなど)を割り当てる言語は、クライアントがそれらで完了したときに対応する呼び出しを扱う必要があります。

特にCにはガベージコレクションがないため、それによって割り当てられたメモリは手動で扱う必要があります。

1つの例外があります。ほとんどの(組み込まれていない)プラットフォームでは、アプリケーションが終了すると、すべての割り当てられたリソースが再生されます。したがって、割り当てが1回限りのスタートアップのみのタイプのものである場合(ループなどで行われるのではなく)、プログラムが出るときにOSを回収するだけでなく、OSを手動で行うことを心配するのではなく、OSを取り戻すだけで問題ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top