DOS環境でコンパイルするとヒープメモリ不足エラー

このQ&Aのポイント
  • DOS環境(WindowsXP上)でC言語をコンパイルすると、ヒープメモリ不足エラーになって、コンパイルできません。
  • 一時対策として、system32フォルダにある”CONFIG.NT”や”AUTOEXEC.NT”に記載されているDOS環境のデバイスドライバのメモリ割り当てを無効化して、ヒープメモリ領域を確保しています。
  • しかし、プログラムサイズが大きくなるとまたメモリが不足してコンパイルできなくなる可能性があります。
回答を見る
  • ベストアンサー

DOS環境でコンパイルするとヒープメモリ不足エラー

DOS環境(WindowsXP上)でC言語をコンパイルすると、 ヒープメモリ不足エラー”Fatal Error C1060 compiler is out of heap space”になって、コンパイルできません。 一時対策として、system32フォルダにある”CONFIG.NT”や”AUTOEXEC.NT”に記載されているDOS環境のデバイスドライバのメモリ割り当て(devicehigh等)を無効化して、ヒープメモリ領域を確保してやり過ごしています。 ただ、今後プログラムサイズが大きくなっていくと、またメモリが不足してコンパイルできなくなりそうです。 DOS環境(WindowsXP上)で任意のヒープメモリサイズを確保するような方法はないのでしょうか? ご存知の方いらっしゃいましたら、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

コンパイラですが、動作環境などに特別の選択理由がなければ Microsoft Visual C++ 2010 Express (無料で利用できるバージョンです) をインストールすれば良いかと思います。 これはC++コンパイラですが、基本的にコンパイルするファイルの拡張子が.cならば Cコンパイラとして働きます。 基本統合環境なのでコンソールから使うには面倒かもしれませんが。 もちろんGCCでも問題ありません。

lopy97
質問者

お礼

度々のご回答ありがとうございましたm(_ _)m VisualStudio環境でのコンパイル(ビルド)に挑戦してみようと思います。

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

一体どんなコンパイラを使っているのでしょうか。 今時のコンパイラならコマンドラインから使う場合でも、必要なのは コンパイラのパラメータ設定でDOS環境設定ではないような。 Googleに「Fatal Error C1060 compiler is out of heap space」でお伺いをたてると VC++2003の場合で、/Zmオプションを使えとか。 それとも本当のDOS環境用のコンパイラを使っているんですか? それだと簡単にはいかないかと。 特にそのコンパイラにこだわるべき理由がない限りコンパイラを変更した方が良いのでは?

lopy97
質問者

補足

ご回答ありがとうございます。 コンパイラは、Microsoft C version 6.0です。 もしコンパイラを変えるとしたら、例えばどんなものが良いでしょうか? gccとかでしょうか?

関連するQ&A

  • C言語をコンパイルしたいのですが、無料のコンパイル環境はありますか?

    学校で、C言語習いました。 課題で出されたレポートの動作確認をしたいのですが、コンパイル環境がありません。 学校に行けばコンパイルできるのですが、エラーが出たら持ち帰り家で考える→再度学校で実行→以下続く をしていたら時間がかかってしょうがありません。 フリーのコンパイル環境はあるのでしょうか? あれば入手方法を教えてください。(PC環境はWindowsXPです。) もちろん、違法入手ではなくて安全なものを探しています。 ない場合は、どのくらいの値段で売っているものなのでしょうか? 検索してよく見かけるのは、『Borland C++Compiler 5.5 』なのですが、Windows2000(!?)までしか対応しておらず、現在はサイトが停止(!?よくわからないのですが、DL不可)していたので入手できませんでした。 入手方法を知りたいのはもちろんなのですが、Cファイルを作成して実行する方法など、短くても簡単でもよいので合わせて使い方を教えていただければ嬉しいです。 あと、素人質問で申し訳ないのですが、C言語のコンパイラでC++やその他の言語のコンパイルはできますか?(その逆もできますか?)

  • コンパイルエラー

    VB6 OS XP コンパイルエラーが起こります。 インタープリターでは問題なく動作します。 以下 エラーメッセージ F:\With You Sorce\PlugIn\Math_H\Hplus.bas(230) : fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'e:\work\utc2\src\P2\main.c', line 507) Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information ソースをいじくって、 KOTA$ = "1\" + Str$(W% \ Y%) この1行を削ると、スムーズにコンパイルされます。 これは、VB6のコンパイラーのバグでしょうか。

  • コンパイルエラー

    本日からC++を勉強しはじめました。 使用しているコンパイラはBORLAND C++ COMPILER 5.5 です。 #include<iostream> int main(){ cout<<"hello"; return 0; } 上記をコンパイルすると下記のエラーが出ます。 いったいどこがいけないのでしょうか。 どなたか教えてくださいませ。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 123.c: 致命的エラー F1003 C:\BORLAND\BCC55\include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H *** 1 errors in Compile *** *** コンパイル終了 ***

  • UMBが利用できない!

    WIN98SEを利用しています。 最近頻繁に「メモリリソースの不足」メッセージが出るために、恐らくコンベンショナルメモリの不足かと思いmem/cコマンドにてチェックをしました。 上位メモリがまったく利用されていませんでしたので、C:\CONFIG.SYSでDOS=HIGH,UMBを追加しました。 ところが何度起動しても上位メモリが使われている様子はありません。STEP-BY-STEPにて確認すると、どうやらc:\config.sys以外が実行されているようなのです。c:\config.sysで記述した順序以外で実行されていたからです。 そこで質問です。 1.DOS=HIGH,UMBは正しいですか?また、CONFIG.SYS上でどの場所に置くのが適当ですか? 2.WIN98の場合CONFIG.SYSがなくても動くといいますが、実際は? とても困っています。どなたか助言を頂けると幸いです! よろしくお願いします。 ※c:\config.sys※ dos=high,umb device=c:\windows\himem.sys device=c:\windows\EMM386.EXE Rem TShoot: device=c:\windows\EMM386.EXE RAM NOEMS rem - By Windows Setup - For 1st Boot - device=c:\windows\EMM386.EXE RAM devicehigh=c:\windows\biling.sys devicehigh=c:\windows\jfont.sys /p=c:\windows devicehigh=c:\windows\jdisp.sys /HS=OFF devicehigh=c:\windows\jkeyb.sys /106 c:\windows\jkeybrd.sys devicehigh=c:\windows\kkcfunc.sys

  • コンパイルできない

    タイトルにも記載したとおりコンパイルが出来ない状態です。 ある参考書に付属されていたCD-ROMでコンパイラをインストールし、参考書通りに行っているのですが、最後にコマンドプロンプトにてコンパイラしようとすると 「C:\WINDOWS\SYSTEM32\AUTOEXEC.NT.システムファイルはMS-DOSおよびMicrosoft Windowsアプリケーションを実行するのに適していません」 と表示されてしまいます。 このようなことにならずに、コンパイルできるようにするにはどうすればいいのか、分かる方がいらっしゃったら教えていただけないでしょうか? プログラミングは初心者なので上記の説明では不足しているところもあると思いますが、その際にはもちろん適宜状態を補足するつもりです。 どうか御協力ください。

  • PC DOSでデバイスPRNが使用できません

    先日、お世話になっている知人からノートPC(富士通 FMV-BIBLO FMV-4100NU/Y モデル5A)のリプレースを依頼されました。 知人が利用する業務ソフトはMS-DOS上でしか動作せず、印刷にパラレルポート接続のプリンタを使用する前世紀仕様のため、わざわざパラレルポートを搭載したノートPC(東芝 dynabook Satellite J61)を探し、そこにIBM PC DOS 2000(PC DOS J7.0/V)をインストールしました(まだ売ってるんですね)。 旧PCからINTERLINK(パラレルポート経由)で業務ソフトと実行環境を移行させ、無事業務ソフトは動作させるところまでは上手くいったのですが、最終的な印刷でつまづいてしまいました。 業務用アプリからの結果はテキストファイルで出力され、それをバッチファイルの中で"TYPE KEKKA.TXT > PRN"といった形でリダイレクトする原始的な手法なのですが、いざ印刷を実行させると、 ------------------------------------------------------------------------------------------------------ 書込みエラーです 書込み中 装置 PRN 中止しますか(A), 再試行しましか(R), 強行しますか(I), 失敗させますか(F)? ------------------------------------------------------------------------------------------------------ と表示され印刷することができません。 また試しに、コマンドプロンプトで"^P"を押し、画面表示をプリンタにリダイレクトさせてみると、 ------------------------------------------------------------------------------------------------------ 書込みエラーです 書込み中 装置 PRN 中止しますか(A), 再試行しましか(R)? ------------------------------------------------------------------------------------------------------ と、これまた同様の結果となり、デバイスのPRNが上手く動作していないようなのです。 おそらくOSのインストール時にプリンタドライバの登録に失敗ししまったのではないかと考えておりますが、何度設定を見直しても自分ではどこが間違っているか気づくことができません。 CONFIG.SYSとAUTOEXEC.BATを以下に転載いたしますので、問題のある箇所をご指摘いただけませんでしょうか。 接続するプリンタは、ESC/P仕様のプリンタ(CANON BJ-10V)です。 ■CONFIG.SYS ------------------------------------------------------------------------------------------------------ BUFFERS=20 FILES=100 STACKS=9,256 DOS=HIGH,UMB DOSDATA=UMB COUNTRY=081,932,C:\DOS\COUNTRY.SYS SHELL=C:\DOS\COMMAND.COM /P /E:512 /H DEVICE=C:\DOS\HIMEM.SYS DEVICE=C:\DOS\EMM386.EXE RAM DEVICEHIGH=C:\DOS\$FONT.SYS DEVICEHIGH=C:\DOS\SETVER.EXE DEVICEHIGH=C:\DOS\$DISP.SYS DEVICEHIGH=C:\DOS\$IAS.SYS DEVICEHIGH=C:\DOS\$PRN.SYS DEVICEHIGH=C:\DOS\ANSI.SYS /X INSTALL=C:\DOS\IBMMKKV.EXE /M=S /Z=4 /C /L /J=90 /S=C:\DOS\MULTDICT.PRO /U=C:\$USRDICT.DCT ------------------------------------------------------------------------------------------------------ ■AUTOEXEC.BAT ------------------------------------------------------------------------------------------------------ @ECHO OFF SET COMSPEC=C:\DOS\COMMAND.COM PROMPT $P$G PATH C:\DOS;C:\TOOL;C:\OSX\EXEDLL; SET COBDIR=C:\OSX\LBR;C:\OSX\EXEDLL; SET LIB=C:\OSX\LIB; SET TEMP=C:\DOS LH C:\DOS\NLSFUNC.EXE C:\DOS\COUNTRY.SYS C:\DOS\CHEV.EXE JP LH C:\DOS\SHARE.EXE LH C:\DOS\KEYB.COM JP,932,C:\DOS\KEYBOARD.SYS LH C:\DOS\PRNESCP.COM VER LH C:\DOS\MOUSE.COM LH C:\DOS\DOSKEY.COM ------------------------------------------------------------------------------------------------------ ※ひとつ気になっているのは、上記のプリンタは手元にないためPCにプリンタが未接続となっているのですが、じつはこれが原因だったりするのでしょうか? どうぞよろしくお願いいたします。

  • コンパイル時のエラーについて

    質問させてください。 BCB6でアプリ開発をしています。 コンパイル時に突然 assertion failed: config, file C:\ilink\import.cpp, line 311 のエラーが表示され正常なコンパイルができません。 おかしいと思い最後のコードを/* */でコメント扱いにすると 正常コンパイルができます。 また、最後のコードを生かしたまま別のコードを/* */でコメント扱いしても正常コンパイルができます。 コード自体の問題はなさそうなのですが、BCBの制限なのでしょうか?結構大きめなアプリとなっておりよくわかりませんが部品の数制限とかメモリ使用制限とかあるのでしょうか? 正常コンパイル時に使用メモリを確認したら11くらいでした。 こんなコメントで意味わからないかもしれませんが解決策ありますか? ググッた感じではIDE内部エラー?とかいてありましたが・・・。

  • DOSのSCANDISKのクラスタスキャンのエラー

    先日、WidowsのエクスプローラでC:ドライブアイコンのプロパティから「ツール」→「チェックする(完全修復ON)」でスキャンディスクを実施しました。 「エラーがあったが修復された」のMSGが出ました。 しかし、完全に修復等を行うためにはDOSプロンプトで実施した方がよいとのアドバイスをもらい、実施しました(C:\windows>scandisk c:)。 クラスタスキャン実施の所で不良セクタ(赤字のB)がありましたが、修復されて終了しました(C:ドライブ)。 しかし、ついでにとD:ドライブも実行したところ、クラスタスキャンの所で次のエラーが出て、実行できませんでした。 <<クラスタスキャンを実行するには空きコンベンショナルメモリが足りません。 CONFIG.SYSのデバイスドライバをREMするか、CONFIG.SYSにEMM386.EXEドライバを読み込んで、DEVICEHIGH=ステートメントを使って、 他のデバイスドライバを上位メモリに読込む必要があるかもしれません。>> 先日、成功したC:ドライブを本日もう一度SCANDISKしようとしたのですが、今度は上と同じMSGが出て実行できませんでした。 DOSの本を読むと、上のMSGの内容は、コンベンショナルメモリは640kBしかなく、ここからデバイスドライバを上位エリアに移し、 640kBをSCANDISK用に有効に使おうというような意味のようですが、これはともかく、なぜ1回目は実行でき、 2回目以降は実行できないのでしょうか。 またどうしたら実行できるようになりますか。 systemは98SE,800MHz,384MB,60GBHDDです。

  • PC-98でDOSのSCSIのCDROMインストール質問

    ハード: PC-9821An PC-9821A-E10のSCSIインターフェイスボード PC-60FのCDROMドライブ ソフト: DOS6.2 ASPIマネージャ1.0 AUTOEXEC.BAT・CONFIG.SYSでASPIGOGO.SYSとNECCDA.SYSのドライバーと正しいMSCDEXコマンドが設定されてると思います。 エラー: 「SCSIボードが見つかりません」 「CD-ROMドライブは使用できません。」 CONFIG.SYSの内容: DEVICE=A:\DOS\HIMEM.SYS DOS=HIGH.UMB DEVICE=A:\DOS\EMM386.EXE /UMB /T=A:\DOS\EXTDSWAP.SYS FILES=30 BUFFERS=20 LASTDRIVE=Z SHELL=\COMMAND.COM /P DEVICEHIGH=A:\ASPI\ASPIGOGO.SYS DEVICEHIGH=A:\DOS\NECCDA.SYS /D:MSCD001 AUTOEXEC.BATの内容: @ECHO OFF PATH=A:\DOS;A:\ SET TEMP=A:\DOS SET DOSDIR=A:\DOS A:\DOS\SMARTDRV.EXE /X MOUSE A:\DOS\MSCDEX.EXE /D:MSCD001 /L:Q SCSIインターフェイスボードのドライバーが必要と思いますがどれのがよろしいでしょうか? PC-98の初心者ですが宜しくお願い致します。

  • 「環境のためのメモリが足りません」エラー

    クライアント(WIN2000)からサーバーにあるMS-DOSプログラムをショートカットキーのダブルクリックで実行すると 「環境のためのメモリが足りません」 「他の端末から実行するか、環境を改善してください」 のエラーが発生して、処理が中断されます。 WIN98の時はconfig.sysに「SHELL=\COMMAND.COM /E:XXX」を追加することで解決できていたと思うのですが NT系マシンだとCONFIG.SYSファイルはからっぽだし、CONFIG.NTファイルは何か違うみたいだし、解決法がまったくわかりません。 またMS-DOSプログラムのexeを直接実行すると 「c:\WINNT\System32\cmd.exe NTVDM CPUは不正な命令を検出しました。」 のエラーが発生してアプリケーションを終了するために「閉じるボタン」の押下しかできなくなります。 上記2点について、どちらか一方でも解決法を知っているかたはぜひアドバイスをお願いします。

専門家に質問してみよう