二次元配列が確保(?)されてなくて困っています。
プログラム内で、以下のように宣言するのですが、
#define MM 1025//プログラム6行目
#define NN 10//7行目
double y[MM][NN];//17行目
y[0][0] = 3.0;//28行目
Visual Studio.NET のデバッグツールの「ウォッチ」で、
y[0][0]に代入された値を確認しようとすると、
エラー:インデックス'0'は、ポインタ/配列'y'の範囲外にあります
と、表示され、中身を確認することができません。
それどころか、プログラムの後半98行目を境に、
y[0][0]の値が上書きされてしまいます。
x[k] = x[0] + k*h;//98行目
ここから、察するにメモリがちゃんと確保されていないと、
思うのですが、どうすればいいかわからず、困っています。
どなたかご教授をお願いいたします。
環境
OS : Windows XP
開発環境 : Visual Studio.NET
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
うーん、私の環境じゃ再現性がないッス(Win2k, VS.net2003)。
普通にウォッチできます。int main(void)
{
int a[3][2];
a[1][1] = 5;
return EXIT_SUCCESS;//ここにBP
}
ウォッチ式はa[1][1]です。当然5と表示されます。
先の回答者に示されたStack over flowの可能性ですが、そもそもデバッグモードでStack over flowが起きら「スタック足らんよ」と言って落っこちるので、ありえないです。
再現性が無いので、私はこれ以上明確な回答を出せないのですが、とりあえず藁にすがる思いでサービスパックを当ててみてください…
> 同様の現象(デバッグツールのウォッチでa[1][1]を確認しようとすると、
> エラー:インデックス'1'は、ポインタ/配列'y'の範囲外にあります
> と、表示される)が、起きます。
a[1][1]をウォッチしてるのに*y*の範囲外にあります??
No.2
- 回答日時:
>二次元配列はウォッチすることができないのですか?
WATCHできますよ
mainが終了してからWATCHしていませんか?
★return EXIT_SUCCESS; でBREAKして見て下さいね(理由は分かりますよね?)
この回答への補足
>mainが終了してからWATCHしていませんか?
いえ、return EXIT_SUCCESS;の前に、
ブレークポイントをおいて、ウォッチしているのですが、
できませんでした。
他の原因は考えられないでしょうか?
No.1
- 回答日時:
メモリが確保されないのでしたら、
動的に配列のメモリを確保する必要があります。
ただ、1025*10位の2次元配列でしたら、
クラスのメンバ変数、もしくは
グローバル変数として宣言されていれば、
静的配列でも大丈夫な気もします。
(XPが動作するほどのマシンでしたら)
double y[MM][NN]; //17行目
は、メンバ又はグローバル変数として
ヘッダのクラスの中もしくは、関数の外で
宣言されているでしょうか。
ローカル変数だとメモリ(スタック)が足りない
思います。
いちおう、2次元配列の動的確保の例を
書いてみましたので、もし参考になれば
double **a;
a = (double**)malloc(sizeof(double)*1025);
for (int i=0;i<1025;i++)
{
a[i] = (double*)malloc(sizeof(double)*10);
}
a[0][0] = 929.221;
CWnd *List = GetDlgItem(IDC_LIST1);
CString str;
str.Format("sum is %f", a[0][0]);
((CListBox *)List)->AddString(str);
for (int i=0;i<1025;i++)//ここから解放処理
{
free(a[i]);
}
free(a);
もしくは、動的確保で調べてみてください。
はずしてたら、すいません。
この回答への補足
返信ありがとうございます。
なるほど。スタック領域の不足というのは考えませんでした。
ですが、以下のようなプログラムでも、
同様の現象(デバッグツールのウォッチでa[1][1]を確認しようとすると、
エラー:インデックス'1'は、ポインタ/配列'y'の範囲外にあります
と、表示される)が、起きます。
int a[3][2]は、さすがにスタック領域でも確保されると思うのですが、
どうでしょうか?
それとも、確保はされているけれど、
二次元配列はウォッチすることができないのですか?
よろしくお願いします。
#include<iostream>
#include<fstream>
using namespace std;
int main(void)
{
int a[3][2];
a[1][1] = 5;
return EXIT_SUCCESS;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- その他(プログラミング・Web制作) プログラムが書けません。 6 2023/01/22 22:58
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- Windows 10 このWindowsUpdateの失敗メッセージは何を物語るか? 5 2023/07/17 11:49
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Windows 10 Visual StudioとVisual C++ Build Toolsについて 1 2023/04/16 03:42
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
int i, int i[1];
-
配列の要素数に変数を入れたい...
-
C言語において、 配列要素をひ...
-
アドレス格納のための二次元配...
-
define で 配列
-
c言語 構造体
-
MFC - ダイアログボックスのPic...
-
コンボボックスでデフォルト値...
-
c言語
-
この変数名はわかりにくいですか?
-
C言語で重複組合せを全列挙
-
C言語(サイズ指定のない配列)
-
MFCのCArrayを使った二次元配列
-
構造体のextern方法
-
C言語から質問です。
-
構造体の配列 char *' 型は 'ch...
-
C#で構造体の配列を持った構造...
-
要素数・要素の値が未定の配列...
-
C言語についてです 5人のテスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報