アプリ版:「スタンプのみでお礼する」機能のリリースについて

char s[65536];
char s0[65536];

と大きなWindowsプログラムの中で宣言するとプログラムのコンパイルはとおり実行もほとんど問題ないのですが
メインウィンドウのサイズ変更をしようとするとエラーになります
そこで

char s[999];
char s0[999];

と宣言を変更すると全く問題無く動きます

メモリ領域を大きく使えるような設定とかあるのでしょうか?

OSはWin98でコンパイラはBorland C++5.51でAPIかつ非統合環境で組んでいます

A 回答 (2件)

> メモリ領域を大きく使えるような設定とかあるのでしょうか?


スタックサイズを大きくする、ということすれば大きなローカル変数を確保することができます。
Borland C++5.51は詳しくないですが、
コンパイラかリンカのオプションで指定できるのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます
今回はとりあえず容量を下げる事で切りぬけようと思いますがスタックを増やさないと行けないときには設定しようと思います

お礼日時:2004/10/09 00:13

こ、これは…よく初心者がやる間違い…。



関数内で自動変数が宣言されたとき、たいていのC/C++コンパイラはその関数が呼び出された時点でスタック領域と呼ばれる領域にその変数の実体を確保しようとします。
しかし、このスタック領域は結構狭いので、このような大容量を自動変数として宣言すると容量オーバーで止まってしまいます。これはコンパイル時には認識されないエラーの一つです。

解決策は、大容量のメモリ領域が必要な場合は、Cの場合はmalloc()、C++の場合はnewを使って領域を確保する、ということです。この領域を使い終わったときにはfree()/deleteで開放することを忘れないでください。
    • good
    • 0
この回答へのお礼

ありがとうございます
しかし65.536kB×2程度で1MBより遥かに小さい容量で個のような自体に陥るとはまだDOS時代のまずいOS設計の影響を受けているのでしょうか?
32BIT化のときに直していないとはがっかりしますね

お礼日時:2004/10/09 00:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!