質問: NULL; } j=(double *)malloc( sizeof( double ) * MAX ); pow=(double *)malloc( sizeof( double ) * MAX ); SAFE_FREE(j); SAFE_FREE(pow); ``` 上記のようにメモリの二重開放には、使い終わったポインタにNULLを代入することで対策していたのですが依然として二重開放によるエラーが見られるので困っています。 上記のプログラムに問題があるでしょうか?バックグラウンドで複数回同時に実行していることが原因なのでしょうか?その場合の対策方法など、ご存じの方はご教授いただきたいです。 ありがとうございます。
回答: > > プログラムaをシェルスクリプトを用いて同時に複数回、バックグラウンドで実行している中で以下のようなエラーが出ます。 > > > プログラムはプロセスという単位で管理されており、あるプロセスの問題が他のプロセスに影響を及ぼすことはほとんどありません。そのため、bashから起動したとか複数回実行したとかバックグラウンドで実行したとかは関係ありません。プログラムそのものの問題です。 > > このエラーはメモリの二重開放が原因だと認識しています。 > > > 問題の本質を理解できていません。二重開放それ自身が問題というわけではありません。メモリを使用しないと判断し一度は解放したにも関わらず、**実は使用され続けていた**。その後、もう一度使用しないと判断されて解放処理が行われた、という状況です。 是正すべきはメモリの使用状況を適切に管理することです。