• ベストアンサー

セグメントのエラー

現在、TurboCでプログラムを作っているのですが、前まで正常に動いていたプログラムに、簡単な計算式(pow関数など累乗の計算式)を加えたところ、コンパイル時に 「Error: Segment _TEXT exceeds 64k」 というエラーが出てしまいます。 環境はPC98の古いパソコンを使ってます。 なにかお心当たりのある方、どうかご教授の方よろしくお願いいたします。

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

  • ベストアンサー
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

#1です 統合環境(?)なら、Options - Compiler - Model で変更できます。 コマンドラインなら、 TCC だけ打てばヘルプが出ます。 -m? がオプションで tsmlh の内1つを指定します。 (tiny small medium large huge) medeum ならコード1MB データ・スタック 64K までOKになるようです。データ用のポインタ(変数への参照など)は、near(16bit)になるらしい…一応、THELPより

kannabis
質問者

お礼

再びの回答ありがとうございます。 コマンドラインから-mmを打ち込んだところ、無事セグメントエラーを回避できました。 ただ、ポインタのせいかプログラムも走らなくもなりましたが…w ともかくも、おかげさまでセグメントエラーの問題は解決できました。 どうも、お世話になりました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

プログラムを修正したことによって、コンパイルで作成されるコードが 64K を超えてしまったのでしょう? (いわゆる64Kの壁ですね) 不要な関数を取ったり、最適化オプション(あったかな?)でサイズ優先にして少しでも小さなコードになるように工夫が必要です。 それでもだめなら、モデルを small から medium などに変更する必要がはずです。(ポインタのサイズが変わる場合があるので要注意です!!)

kannabis
質問者

補足

ご回答ありがとうございます。 一応不必要な関数は出来る限り排除したりしたのですが、やはり改善されませんでした。 モデルの変更を行ってみようと思ったのですが、もってる参考書を見てみても、モデル名などが書いてあるだけで、やり方がわかりませんでした。 よろしければ、メモリモデルの変更方法をお教え願いないでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A