STLコンテナでメモリの最大領域超えをチェックするには?(コンテナ入れ子時)


ytk  2004-07-16 21:08:41  No: 54017

教えてください。STLのコンテナをmap<int, vector>のように入れ子にした場合、
にメモリ確保エラーを検出したいのですが、
vectorの領域をどんどん使用していくプログラムを作った際に、mapの件数が複数個(4個以上で)ある場合に、try,catchでメモリ確保エラー(Can not allocate memory)を取得できません。
一体どのようにエラーを取得すればいいのでしょうか?
このとき(try,catchで取れなかった時)
カーネルエラー(kernel: Out of Memory: Killed process)が出ました。
(ちなみに、map件数を4個未満とした場合には、try,catchでエラー検出可能でした。おそらく、map件数については動作環境に依存するとは思いますが、、、)


tetrapod  2004-07-16 21:45:37  No: 54018

コンパイラーと STL バージョンは何ですか?
ココで聞いている以上は VC++ だと思いますが...

VC++6 付属の Dinkumware STL の <vector> には、正しく要素数の拡張ができないバグがあります。

STLport http://www.stlport.org に乗り換えるか、
パッチを当てる http://dinkumware.com/vc_fixes.html 必要があります。

で、話が VC++7.1 だと上記の解説は全部無駄レスになるわけで、
最初から開発環境等をきっちり書け!ということになるわけです。


tetrapod  2004-07-16 22:38:27  No: 54019

あれ?リンクがうまく貼れていない...
http://www.dinkumware.com/vc_fixes.html
http://www.stlport.org/


ytk  2004-07-16 23:10:34  No: 54020

レスありがとうございます。
すいません。VC++掲示板ですが、開発環境はLinuxです。m(_ _)m
C++共通かとおもっていちおう書いてみた次第です(´-`).。oO


tetrapod  2004-07-16 23:18:16  No: 54021

いやだから「コンパイラと STL バージョンは何」という質問にはまったく答えてくれないわけですね。
もう知らん。

gcc-2.9x のころのものは g++ 自体も STL もバグバグなので信頼できません。
gcc-3.4.1 にしませう。

VC++ に依存しないピュア C/C++ ならたとえば
http://forums.belution.com/ja/cpp
とかお勧め。


ytk  2004-07-16 23:25:52  No: 54022

すんません。
スレッドモデル: posix
gcc バージョン 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
です。
http://forums.belution.com/ja/cpp
上記サイトあたってみます。
どうもです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加