4

C++ で画像処理プログラムを作成しています。この目的のために、サード パーティ プログラム (エッジ検出器) をプログラムで使用する静的ライブラリに変更しました。

元のエッジ検出器は、メイン関数が実行された後にメモリをクリーンアップするために OS に依存していたようです。残念ながら、この元のコードを変更した後、メイン関数は「共通」の繰り返し呼び出される関数になり、自動クリーニングは実行されません。その結果、関数が呼び出されるたびに大量のメモリ リークが発生します。

これを修正するために検出器のコード全体を徹底的に確認することはできません。したがって、質問したいのですが、一般に、プログラム全体の「サブルーチン」(私の場合は検出器)を残りの部分から分離し、サブルーチンの後にOSが強制的にクリーンアップする方法はありますかスタンドアロンプ​​ログラム?たとえば、スレッドを使用した解決策はありますか?

返信ありがとうございます。

4

2 に答える 2

0

*nix プラットフォームを使用している場合は、おそらくforkライブラリを呼び出すことができます。

于 2013-08-07T12:23:02.080 に答える
0

プログラムから起動される別のプロセスで実行できます。

子プロセスの標準入力、標準出力をパイプする方法があるため、制御できます。

また、valgrind を使用してリークを検出し、修正することもできます。

Linux を使用している場合は、 fork() または system() 関数をグーグル検索して、子プロセスを作成できます。

于 2013-08-07T12:23:06.023 に答える