int a ,b;
int wk[100][100];
for(a = 0 ; a < 100 ; a++){
for(b = 0 ; b < 100 ; b++){
wk[a][b] = 0;
}
}
を行うと、処理がフリーズしてしまいます。
wk[a][b] の行を外すとフリーズは起こらなくなるようです。
printfで中身がどこで止まっているかを調べて見ましたが、
aは0のままで、bは80くらいまでは動いているようです。
コンパイラはlccを使用しています。
原因のわかる方、教えていただけないでしょうか。
No.3ベストアンサー
- 回答日時:
DOSならメモリモデルで扱えるデータの大きさに制限がある場合があります。
昔のCPUやDOSではメモリをセグメント単位で管理していたからですね。
100×100は1万で、これにint型のバイト長を掛けますから、思ったよりもデータサイズは大きいんです。実際にsizeofで配列のデータの大きさを確認して見て下さい。
それに他の変数やスタック領域など、全てのデータ領域の合計が上限の64KBをオーバーしているんじゃないかと思います。(普通はエラーや警告などが出ると思うのだけど?)
それで実行途中でスタックが破壊されて暴走しているのだと推測します。
対処方法としては、一度に大量のメモリを使わない様にプログラムを変えるか、より大きいメモリモデルに変更するかですね。
タイニーモデル:データとコード(プログラム)を合わせて64KB以内
※DOSの実行ファイルの.COMはこのメモリモデルです。
スモールモデル:データは64KB以内、コード64KB以内
ミディアムモデル:データは64KB以内、コード64KB以上
コンパクトモデル:データは64KB以上、コード64KB以内
ラージモデル:データは64KB以上、コード64KB以上
LSI-Cがもしフリーの試食版ならスモールモデルしか使えなかった筈です。
参考URL:http://www.kumei.ne.jp/c_lang/intro/no_56.htm
No.5
- 回答日時:
>原因のわかる方、教えていただけないでしょうか。
マニュアルも解凍しましたよね。
3.3 データの内部表現
3.9 スタックの大きさ
スタックの大きさは、標準ではSモデルとPモデルでは2500バイト、DモデルとLモ
デルでは 5000 バイトになっています。LSI C-86で作成したプログラムの実行に
は、最低でもこの大きさのスタックが必要です。
また、 49 ページ
-kX
リンカにオプションXを渡します。たとえば、 スタックの大きさを設定
するにはこのオプションを使い、 以下のようにします。
lcc foo.c -k'-s 5000'
なども参照し、扱う値が -128 127 の範囲内だったら char に変えるとか、
いろいろ試して下さい。
No.4
- 回答日時:
前の回答に補足します。
質問のようにプログラムすると、配列はスタック領域にローカル変数として確保されます。
確かデフォルトではスタック領域は数KBしか確保していなかったと思います。
スモールモデルのまま動かせるかもしれない方法は、
リンカのオプションで通常よりもスタック領域を大きく確保するように設定するか、
配列をグローバル変数にすれば動くかもしれませんね。
根本的にはDOS時代のLSI-Cを使い続けるよりも、VCなどもっとマシな開発環境を使ったらと思いますけどね。
参考URL:http://hp.vector.co.jp/authors/VA029427/v-lsic2. …
No.2
- 回答日時:
「DOS上」ということだと, この wk を局所変数にしていたら (スタックがあふれて) 動かないかもしれない... かな?
なぜいまどき LSI-C なのか, 理解に苦しむけど.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数のプロローグとエピローグ...
-
二分探索木の行きがけ順走査
-
再帰関数を使うとき、ソフトウ...
-
printf / sprintf のスタック消...
-
c言語 リストデータ構造 キ...
-
C# スタックに格納する要素が...
-
C言語 経路探索 経路リスト...
-
情報処理の問題で理解ができま...
-
基本情報技術者のデータ構造あ...
-
関数呼び出しについて質問です
-
パソコンでインターネット接続...
-
プログラムの規模を表す単位「k...
-
ページ置き換え LRU方式
-
ubuntuで デイスク/deb/loopと...
-
hdmiはパラレル?シリアル?
-
「ByRef引数の型が一致しません...
-
タイピング速度を上げる方法に...
-
ブラインドタッチって練習し始...
-
ステップ数について
-
MoveNextの処理速度は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
最大スタックサイズを大きくす...
-
printf / sprintf のスタック消...
-
エラー?メッセージ
-
スタックフレームの消滅
-
_CRTIMPの意味は?
-
関数のプロローグとエピローグ...
-
逆ポーランド記法
-
マス目上の移動のアルゴリズム
-
C言語・スタックを使用した逆...
-
CASLとCASL2の違いについて
-
スタック領域変更
-
Cプログラミングの関数電卓のア...
-
スタック C言語
-
再帰処理を非再帰処理に書き換...
-
gccでスタックサイズを変更する...
-
スタックを用いて整数配列を入...
-
スタックの仕組み
-
スタックの伸張方向
-
H8マイコン スタック領域に...
おすすめ情報