7

私のCプログラムでは、子プロセスを作成し、その中で文字列を解析し、コマンドmalloc()で渡すために使用するためのポインター配列を作成しました(を使用して) 。execvp()

しかし、問題は、子供が作成した記憶をどのように解放するかということです。execvp()新しいタスクを実行し、戻る場合と戻らない場合があります。それが戻らない場合、それは成功し、子供は死にます(そして私は実際にfree()コマンドを使用することはできません)。失敗した場合は戻り、次のコード行を続行します。これがメモリを解放する唯一のチャンスですか?

4

1 に答える 1

11

あなたはする必要はありません。exec()具体的には、 -typeルーチン(たとえば、あなたの場合)が呼び出される前にプロセスにメモリを割り当てるexecvp()と、元の実行可能ファイルに関連付けられているすべてのメモリが解放されます。これは、プロセスが終了し(そしてすべてのリソースが解放され)、新しいプロセスがクリーンな状態で開始されるのと同様の状況です。

于 2013-01-24T03:30:36.843 に答える