いつも参考にしております、macと申します。
コンソールアプリケーションで実行中に
以下のメッセージが表示されます。
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
このメッセージが出る場合、どこに原因があるのでしょうか?
このメッセージの表示直前では
int nCnt = 5123;
int *pArray = new int[nCnt * 2];
を実行してますが、int型のnewに失敗しているのでしょうか?
どなたかご教授お願いします。
環境
windowsXP VC++6.0
範囲外参照とか、そのあたりかも。
明らかに情報が足りないので、ご自身でデバッグしてください。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200502/05020002.txt
デバッガが使えるはずなのでそれでステップ実行してみてはどうでしょう。
少なくともデバッガで状況を確認してから掲示板へ投稿する事をお勧めします。
多分、デバッガで追うくらいはしていないと質問されてもこたえられないと思います。
デバッガの使い方についてはHELPを読むか、参考書で調べて見てください。
Ban様、PATIO様回答ありがとうございます。
debugモードで実行すると、「仮想メモリ領域が足りない」とのメッセージが
出力されてデバッグができない状態でした。
strdupで不必要な領域を作成していた箇所を、修正してメモリの使用量を
抑えた結果、上記のRuntimeエラーメッセージも出力されずに正常に
動作しました。
また質問ですが、仮想メモリ領域で4096MB割り当てているのに対して、
タスクマネージャで確認したところ、メモリ使用量が2500MB位になったあたりで
Runtimeエラーメッセージが出ていたようです。
一つのアプリケーションで使用できるメモリ上限など、制限があるのでしょうか?
> また質問ですが、仮想メモリ領域で4096MB割り当てているのに対して、
それはエラーも出るかと。
32bitのCPUでは、メモリ空間自体が全部で4096MBしかありません。(アドレス自体が32bitなので)
そして、この中でアプリが使えるのは通常 2GB 以下と考えてください。(もっと少ないのが普通だと
思います)
提示のような指定をすると、システム全体が不安定になったりしても当然と思います。
もっと少ないメモリを切り貼りして使うなり、64bitOSを検討するなり、設計を見直されることをお
勧めします。
作成されているアプリケーションの性質にもよりますけれど、
一つのアプリケーションで大量にメモリを取ってしまったら
他のアプリはまともに動かなくなると思います。
例えば、そのソフト以外の余計なプログラムを一切使わないとしても
OSが使用する部分のメモリがありますし、仮想で割り振っていると言っても
足りない部分はスワップが走るでしょうからパフォーマンスはがくっと落ちると
思います。
Banさんも言われているように64bitOSの使用を考えるか
さもなくば、そのとき処理に必要な部分のみをメモリ上に置くように
仕様を変更するべきでしょう。
確かに最近は環境がリッチになってメモリもガンガン使えるようになってはいますが、
無制限に使えるわけではありませんし、そのソフトが動いている時は他に何も出来ない
のでは使い勝手が悪いと思いますよ。
仮想メモリーといってもずっと仮想というわけにはいかないので、
ウインドウズのシステムの中で仮想と物理のアドレスの切替えを
していると思います。
PATIOさんの意見にもあるとおり、
割り当てられるメモリーは理論上は2Gまでですが、現実は搭載している
メモリーからウインドウで使用しているリソース分を差引きした容量です。
少しシステム的に考えたほうがよさそうですね。
64BITOS、64BITCPUにしても、現実的に4GBYTEメモリが使えるマザーボード
を手に入れるのも難しいと思います。
#チップセット・メモリーが対応しているのかな?