• ベストアンサー

配列変数の添字が範囲外ですと でます

ruinの回答

  • ruin
  • ベストアンサー率37% (3/8)
回答No.6

なんか混乱を招くだけかもしれませんが・・・ たとえば実行環境が16bitだと通常は1変数は64kBまでしか作れません。 配列変数もそうです。 そういった巨大配列変数(・・・ってもう巨大って時代じゃないか・・・)を作成したときもこのエラーメッセージが出力されていたと思います。

関連するQ&A

  • 変数の添え字をforで処理する方法。

    変数の添え字をforで処理する方法。 今朝、 http://okwave.jp/qa/q6000492.html で質問させていただき、この方法は解決したのですが、 $_POST[hensuu1] $_POST[hensuu2] .... と言う場合に、今朝の方法を応用して、 for ($n=1; $n<=10; $n++){ echo $_POST[{'hensuu'.$n}]; } と記述しても旨く処理できずに、 Parse error: syntax error, unexpected '{', expecting ']' in ・・・・・ のようなエラーが出てしまいました。 解る方いらっしゃいましたらご教授お願い致します。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • htmlからcgiに変数を配列にして渡すとき

    フォームにて、質問1,2,3…と入力してもらい、 1を答えないで2を答えるとか、 2を答えないで3を答えるとかを排除したいので、 変数を配列にして受け取りたいのです。 とりあえず今のところはこうなってます。↓ #htmlファイル# <INPUT type="text" size="30" name="situmon[1]"> <INPUT type="text" size="30" name="situmon[2]"> ... としてcgiに持っていき、 #cgiファイル# for($i=1; $i<=4; $i++){ if($form{'situmon[$i]'} eq "" && $form{'situmon[$i+1]'} ne ""){ &error; #→エラーメッセージサブルーチン exit; } } のようにして受け取ろうとしてるのですが、うまくいきません。 上のようにhtmlではどう書くべきか、cgiではどう受け取るべきかを教えてくだされば嬉しいです。

    • ベストアンサー
    • CGI
  • BASIC言語 配列変数

    問題21. 読み込んだデータから「最高点」を表示せよ. 5 READ N     → データ数の読み込み  10 DIM SEISEKI(N)  → 配列の宣言  20 FOR I=1 TO N  30 READ SEISEKI(I)  40 LET S=S+SEISEKI(I)   → 配列の合計  50 NEXT I  60 LET HEIKIN=S/N   → 平均値  70 PRINT HEIKIN  80 DATA 8             → データ数  90 DATA 80,90,100,85,78,64,72,86 → 成績データ  END

  • 変数名(配列)の中の変数

    配列変数の名前の中に変数を入れたい場合、どのように記述すればいいのでしょうか? use strictを用いて、以下のように書いてみましたが、エラーが出て上手く動きません。 ループ x: 1-3 ループ y: 1-2 ${"answer$x"[$y]}=入力値 ←この部分を教えてください。    ループ閉 y ループ閉 x --------------------     answer1[1] answer1[2] answer2[1] answer2[2] answer3[1] answer3[2] とループを通るように、変数名を設定したいのですが、 エラーが出て実行ができません。 エラー:Can't use string ("answer1") as an ARRAY ref while "strict refs" in use at~ -------------------- 実際のプログラムは以下のように書いています。(該当部分のみ) for(my $x=1; $x<$num; $x++) { for (my $y=0; $y<$n; $y++) { my $y = ($x*$n)+$d; my @line = split(/\r/, $data[$y]); my @line0 = split(/\t/, $line[0]); ${"answer$x"[$y]} = $line0[0]; } } よろしくお願いします。

  • 配列変数を用いて平均値を求める

    こんにちわ 実は、入力データを使って平均値を求めるプログラムについてなんですけど。 //データの平均値の計算 #include <stdio.h> void main () { int i, k, n, x[100]; double a; while (1) { a = 0; printf("データ数を入力してください..."); scanf("%d",&n); printf("正の実数のデータを入力してください。"); for (i = 0;i < n ;i++) scanf("%d",&x[i]); for (k = 0;k < n;k++) a += x[k]; printf("平均値 %f\n", a/n); } } すいません、インデントがいい加減です。  こうやると普通に平均値を出せますが、最初にデータ数を入力しなければいけません。  私は、データの個数を入力しないで平均値を出したいと思います。どういう風に上のプログラムを変更すればできるのでしょうか?上のプログラムに誤植があるとは思いますが。。。  また、たとえば最後に0以下の数字を入力したらデータ入力を終わらせる...  if(x[i]<=0)break; はどこに入れればいいでしょうか?  たくさんの質問すいません。ご教授よろしくお願いします。

  • PHP 配列の添字に変数は使えない?

    phpで初歩的な質問ですが、foreachでループしてる間 配列にどんどん文字を入れたいと思います。 $i = 0 ; foreach($entry as $no){ $sort[\'$i\'] = \"hogehoge\" ; $i++; } イメージは↑こんな感じにしたいのですが、配列の添字に変数は 使えないようなことが書いてありました。 こういう動きをする場合にはどうすれば良いのでしょうか? ご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列、添え字に関するコンパイルエラーにつきまして。

    現在、arduinoで赤外線リモコンを作成しております。 ネット上の情報を参考にON/OFFのみの送信・受信はできたので、ボタンの数(mode)を21種類に増やして送信機を作成を試みております。 赤外線のON/OFFパターンの配列データが大きかったのでdata[][67]としてPROGMEM に保管し、SRAMにondata[67]として読み込もうとしています。 この状態でコンパイルすると下記のようなエラーが出てしまいます。 [mode][i][cnt]を配列のインデックス(添え字)として使っていますが、これを使用している行にこのエラーが出ます。 調べてみると添え字はintではいけないといった情報もみかけますが、data[i]のように使用されているのをよく見かけます。 データ型を変えてみたり試してみたのですが、'char[int]' や'int[char]'のように変わるだけで解決しませんでした。 このエラーに対して何か解決策があればご教授願えないでしょうか。 よろしくお願い致します。 ※エラー invalid types 'int[int]' for array subscript ※グローバル変数(PROGMEM に保存) const uint16_t data[21][67] PROGMEM = { /* 4bytes(16bits), Leader code & Customer code(CC) & Data code & ^Data code & Mode code */ /* data[0] */ {9200, 4500, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600}, /* data[1] */ {9200, 4500, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600},           ・           ・           ・ /* data[20] */ {9200, 4500, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 1650, 600, 1650, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600, 550, 600, 1650, 600}, }; ※関数 void sendOnSignal(int mode){ int ondata[67]; for (int i = 0; i < 67; i++) {ondata[i] = pgm_read_word_near(&(data[mode][i]));} int dataSize = sizeof(ondata[mode]) / sizeof(ondata[mode][0]); /* IRcodeの配列数を計算。67になるはず。 */ for(int cnt = 0; cnt < 67; cnt++) /* iIndexIRcode(現在の配列)が偶数番目ならhigh。 奇数番目ならlow。 */ { unsigned long len = ondata[mode][cnt]; /* lenに現在の配列の時間を代入。 */ unsigned long us = micros(); /* usにパルス開始時刻を記録。 */ do { /* 周波数38kHzでOn/Offするように配列の時間分点滅。 */ digitalWrite(IRLED_pin, (cnt%2) ? LOW : HIGH); /* 三項演算子[A ? B : C] (Aがtrueの場合はB,falseの場合はCを実行する) */ delayMicroseconds(8); /* キャリア周波数38kHzでON/OFFするよう時間調整 */ digitalWrite(IRLED_pin, LOW); delayMicroseconds(7); } while (long(us + len - micros()) > 0); /* 送信時間に達するまでループ */ } } /* void sendSignal終了*/

  • N88BASICをWINDOWSで読めるように保存したいのですが

    N88BASICでGPIBを使用した検査器があります。 WINDOWSでBASICの編集ができるフリーソフトN88互換BASIC for Windows95で編集しようとして、3.5インチのFDDにプログラムを保存しようとすると、DISK I/Oエラーとなってしまいます。 フォーマットは1.2M 1.44Mで試してみました。 N88BASICを保存するにはどうしたら宜しいでしょうか?

  • N88互換BASIC for Windows95

    N88互換BASIC for Windows95を使ってBASICの勉強をしています。 FOR NEXT などを使って簡単なプログラムを作らないといけません 例えば○を左から右移動させたりしたいのです 簡単なプログラムを作ってほしいです 画像のようなものです

  • 配列に添え字を書かないと・・・

    java初心者です。 配列として宣言した変数(?)に、添え字を書かないとどういう処理をするのでしょうか? 例えば、 int[] n = new int[10]; という書き方をしたのに、使うときに n というのを何の添え字もつけずに使っているようなのですが・・。 よろしくお願いします。