- ベストアンサー
メモリアロケーション異常の発生方法
こんにちは。 プログラムテストの仕様書を作成してます。 mallocの戻り値がNULLの場合の処理のテスト方法に迷っています。 指定したサイズのメモリが取れなかったときに、 mallocで異常(戻り値=NULL)になるということですので、 あらかじめメモリ不足状態を作るのかとも思うのですが、 方法がよくわかりません。 いいテスト方法があれば、教えてください。 宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
メモリ不足を作りたいのであれば、mallocで領域確保できなくなるまでひたすら領域確保する関数を作っておいて、デバッグ対象のコードの前に呼んでやればいいのでは? 領域解放する関数も作っておかないといけませんが・・・ その前に、これらの関数もデバッグしておかないといけませんが・・・。
その他の回答 (2)
- tatsu99
- ベストアンサー率52% (391/751)
そのプログラムの単体テストという前提ですが、 単純に戻り値をNULLで置き換えれば良いと思います。 a = malloc(...); この後、a を NULLに書き換えます。 (デバッガで書き換えるか、直接コードを書くかの何れかです) 通常、malloc等のメモリ不足に関する試験は、単体テストでは、発生させずらいので、上記の方法で十分でしょう。 要は、mallocでNULLが返された時の以降の処理が、 予想通りに動作するか否かが検証できれば良いわけですから。
お礼
ご回答ありがとうございます。 確かに、今回はプログラムの単体テストですので、↓を確認したいのです。 「要は、mallocでNULLが返された時の以降の処理が、 予想通りに動作するか否かが検証できれば良いわけですから。 」 このレベルの試験では実際にメモリ不足にさせる必要はないわけですよね。 混同してしまっていました。 ありがとうございました!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
単にNULLを返すようなダミーmallocを作ってもいいかと思いますが、メモリを確保できないような状態で他の部分が動くのかというテストもやはり必要だと思うので、mallocがNULLを返すようになるようになるまでreallocするような別メモリ圧迫プログラムを作成すればいいかと思います。
お礼
ご回答ありがとうございます。 確かに、今回はプログラムの単体テストですので、ダミーをつくってもいいのですね。盲点でした・・・。 単体テストは、ダミーで行うことにします。 また、今後の試験工程の為にも、メモリ圧迫プログラムも作っておくことにします。 ありがとうございました!
お礼
ご回答ありがとうございます。 メモリを確保できる限り確保しつづけるプログラムを作っておけばいいんですね。 今後も同様のテストを行うことがありますので、開放処理もあわせて1本作っておくことにします。 ありがとうございました!