• ベストアンサー

配列の初期化について

今取り組んでいるC言語の課題の中で、 二次元配列"map[100][100]"を初期化するようにしたいのですが、 intでcomx,comyという二つの変数を宣言して、 for(comy=0;comy<100;comy++){   for(comx=0;comx<100;comx++){     map[comx][comy]=0;   } } のように初期化を図ったのですが、実行するとなぜか初期化が終わらず、 計算しっぱなしで止まってしまいます。(コンパイルは出来ます) 解る方、どこがおかしいのか指摘お願いします。。 (質問ミスっていたので質問し直しました)

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

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.1

http://okwave.jp/qa/q7236116.html 前回の質問のどこをミスったのか分かりませんが、(前回よりも情報量が少なくなっている気もしますが) いずれにしても前回、回答をいただいている内容は検証されたのでしょうか? コンパイルエラーもリンカーのエラーも出ないで、暴走しているというのは、メモリ領域を壊している以外考え難く、前回の質問でいただいている回答もそれを指摘されているかと思います。たいへん詳しく説明されております。 要は、int a[100][100] のメモリ領域が正しく確保されていないのだと思います。領域が確保出来ているのであれば、記述自体、前回のでも今回のでも特に問題はないです。 まずは使っているコンパイラの使用条件(前回の回答のURLでは、自動変数は2500バイトしか確保出来ないなどの情報もあります)やメモリモデルなどの条件を見直してみるとか、 グローバル領域に割り当てたり、malloc() (これも前回の回答のURLに記載されています)などを使ってみるなど。 もしくはMAPファイルが出力されるのであれば、それを見てみるとか、 色々と検証してみることはあるかと思いますよ。 ご参考に。

kirbysig
質問者

お礼

申し訳ございません、 色々と勘違いしておりました。。

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

関連するQ&A

  • 二次元配列の初期化が出来ません

    今取り組んでいるC言語の課題の中で、 二次元配列"map[100][100]"を初期化するようにしたいのですが、 intでcomx,comyという二つの変数を宣言して、 for(comy=0;comy<100;comy++){   for(comx=0;comx<100;comx++){     map[comx][comy]=0;   } } のように初期化を図ったのですが、実行するとなぜか初期化が終わらず、 計算しっぱなしで止まってしまいます。(コンパイルは出来ます) 解る方、どこがおかしいのか指摘お願いします。。

  • 多次元配列の構造体の初期化

    タイトル通りです。やり方がわかりません。 構造体変数の初期化や多次元配列の初期化が載ってるページは多いのですが、コレだけは調べても解りませんでした。 typedef struct{ int flag; ~~~~~(略)~~~ }map_t; map_t map[64][64]; の後、map_t型のmap64*64の int flag全てに値を代入したいのですが 詳しいやり方が解りません。 int hensuu[3][3]={   {1,2,3},{4,5,6},{7,8,9} }; 普通の多次元配列みたいにmこんな感じでやりたいんですけど… 初心者でスミマセン。回答いただけたらありがたいです。

  • 配列のNULL初期化について

    C言語についての課題の一部です。 int型の配列 iArrayをNULL初期化したいのですが、 課題では下のように書かれています。 &iArray[] = NULL; このような書き方でNULL初期化することは可能なのでしょうか?

  • 配列の初期化に関する質問です

    配列を初めにAB[10]={0,1,・・・・,0}のように宣言すればちゃんと動くのですが, int l_AB=10; としてからAB[l_AB]={0,1,・・・・,0}とすると「配列初期化子内の要素が多すぎます」となりコンパイルできません。自分には何が違うのかよくわかりません。出来ないのが普通なのでしょうか? #include<stdio.h> #include<stdlib.h> int main() { int l_AB = 10; int AB[l_AB]={0,1,1,1,1,0,1,1,1,0}; int i=0; for(i=0;i<l_AB;i++){ printf("%d",AB[i]); } }

  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java
  • 3次元配列

    初歩的な質問で申し訳ございません、非常に困っています 教えて下さい lotno(1~4,1~4,1~5) の3次元配列を宣言し、計算で求められた値を代入したいのですが どのように記述したらいいのでしょうか? また配列 lotno() はモジュール変数です

  • 多次元配列について

    int[]a = {1,2,3} int[]a = new int[3];//は普通の配列 int[]a = {{1,2,3},{4,5,6}}; int[][]a = new int[3][3]は //2次元配列 int[]a = {{1,2,3}{4,5,6}{7,8,9}};int[][][] = new int[3][3][3]; //は3次元配列 int[][][][]a = new int[3][3][3][3]; //は4次元配列になると思いますがこっちの方はコンパイルエラーが出ないのに int[][][][]a = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; //はコンパイルエラーが出ます どうしてですか?

  • 初期値を持ったクラスの配列を使うには?

    C、C++の経験はけっこう長いのですが、javaは初心者です。 初期値を持ったクラスの配列はC++だとたとえば、 class User { char * name; int user_id; }; と宣言しておいて、 User user[] = { {"moritan2", 12345}, {"moritan3", 56789}, }; と書けますよね。これをjavaでやるにはどうすればいいのでしょうか? javaで class User { String name; int user_id; }; と宣言しておいて、 User user[] = { {"moritan2", 12345}, {"moritan3", 56789}, }; とやってもコンパイル時にエラーになってしまいます。

    • ベストアンサー
    • Java
  • 要素にnullが入った多次元配列の次元数(2回目)

    同様の質問について再度投稿します。 以下、問題集で見掛けたプログラムの抜粋です。 String[][] Array = { {"Sunday", "Monday"}, null, {"Monday", "Tuesday"} }; int count =0; for (String[] A : array){ count += A.length; } System.out.println(count); このプログラムを実行すると、 要素nullのlengthが数えられないため、 NullPointerExceptionが発生する、ということです。 以前に質問した際には、 上記配列に含まれるnullは、大カッコで囲まれていないため、 次元としてカウントされないので、配列の次元数は 2次元となる、という回答を頂きました。 (配列変数も二次元で宣言されている。) 細かいようですが、大カッコで囲まれていないnullは 次元数としてカウントされなくても、要素として 拡張for文の対象にはなるのでしょうか…? 解説をお願いします。

  • 宣言した変数、配列をプログラム実行中なるべくたやすく初期化したい。

    VB.Net2003を使用しています。 最初プログラムを実行中、宣言した変数、配列をプログラムをなるべくたやすくまとめて初期化する方法はありませんか。