- ベストアンサー
メモリ領域を
char s[65536]; char s0[65536]; と大きなWindowsプログラムの中で宣言するとプログラムのコンパイルはとおり実行もほとんど問題ないのですが メインウィンドウのサイズ変更をしようとするとエラーになります そこで char s[999]; char s0[999]; と宣言を変更すると全く問題無く動きます メモリ領域を大きく使えるような設定とかあるのでしょうか? OSはWin98でコンパイラはBorland C++5.51でAPIかつ非統合環境で組んでいます
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> メモリ領域を大きく使えるような設定とかあるのでしょうか? スタックサイズを大きくする、ということすれば大きなローカル変数を確保することができます。 Borland C++5.51は詳しくないですが、 コンパイラかリンカのオプションで指定できるのではないかと思います。
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
こ、これは…よく初心者がやる間違い…。 関数内で自動変数が宣言されたとき、たいていのC/C++コンパイラはその関数が呼び出された時点でスタック領域と呼ばれる領域にその変数の実体を確保しようとします。 しかし、このスタック領域は結構狭いので、このような大容量を自動変数として宣言すると容量オーバーで止まってしまいます。これはコンパイル時には認識されないエラーの一つです。 解決策は、大容量のメモリ領域が必要な場合は、Cの場合はmalloc()、C++の場合はnewを使って領域を確保する、ということです。この領域を使い終わったときにはfree()/deleteで開放することを忘れないでください。
お礼
ありがとうございます しかし65.536kB×2程度で1MBより遥かに小さい容量で個のような自体に陥るとはまだDOS時代のまずいOS設計の影響を受けているのでしょうか? 32BIT化のときに直していないとはがっかりしますね
お礼
ありがとうございます 今回はとりあえず容量を下げる事で切りぬけようと思いますがスタックを増やさないと行けないときには設定しようと思います