
2次元配列でウォッチが出来ない
環境
windowsXP Prp
Visual Stadio2003
下記の状況で2次元配列のウォッチが出来ません。
1.Visual Stadio2003を起動
2.ファイル→新規作成→プロジェクト
3.プロジェクトの種類はVisual C++プロジェクトでテンプレートからWindowsフォームアプリケーションを選択して、
プロジェクト名に「test」と入力後OKボタン押下
4.Formの適当な位置にボタンを貼り付ける
5.貼り付けたボタンをダブルクリックしてボタンクリックイベントの中(Form1.h)に以下の処理を記述する
char cWork[5][20];
memcpy(&cWork[0],"こんにちは",sizeof(cWork));
7.memcpy(&cWork[0],"こんにちは",sizeof(cWork));
にブレイクポイントを置いて、デバッグ実行をする
8.フォームのボタンを押下してブレイクポイントで止まったら「cWork」をウォッチする
9.memcpy(&cWork[0],"こんにちは",sizeof(cWork));
をステップ実行後ウォッチで内容を確認すると以下のようになります
━cWork{Length=5}char[][][]
┣━
┣━
┣━
┣━
┗━
ウォッチは出来ませんが、cWorkの中身をテキストボックスに表示や1次元配列に格納したところ
cWorkに正しく値は入っていました。
ウォッチ出来ないのはVisualStadio2003のバグなのでしょうか?
お分かりになられる方いらっしゃいましたらご教授お願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>cWork[0][0]
ええと、其の様なメモリ空間を普通見るならcWorkだけで5つの20バイト空間らしきものが+付きで表示されると思うのですが、それこそ、その前にメモリ破壊とかのコードがあ有れば、VC++自体がメモリの把握は出来なくなります。
全体のコードが不明なので、推測ですが。
この回答への補足
ご回答ありがとうございます。
プロジェクト作成時に、
Windowsフォームアプリケーションを選択している為、
現象が発生しているのかと思っています。
ボタンのイベントにchar cWork[5][20];
のみ書いてcWorkをウォッチするとt_nojiriさんのおっしゃる通り、
5つの20バイト空間らしきものが+付きで表示されるはずなのですが、
下記のような状態になっています。
-cWork{Length=5}char[][][]
┣━
┣━
┣━
┣━
┗━
No.3
- 回答日時:
t_nojiri さんw撃沈ありがとです
この方が書いた、
>&cWork[0]で配列のアドレスのアドレス指してしまってます。
の意味がわかれば解決する気がしますね
ウォッチなどは実体化していない変数などには効果がないことがあります。
C言語などは書いたとおりに実行していないことがあり、
例として10行目で止めても実際には100行あたりで実行していることもあります。
運が悪いときは、実行すらしないこともあります。
Cコンパイラーが自動的に判断して、実行した結果を最初から格納していることがあります。
この回答への補足
再度回答ありがとうございます。
いろいろやってみましたがやはりウォッチ出来ません。
ウォッチでcWork[0][0]を見ようとすると
エラー : インデックス '0' は、ポインタ/配列 'work' の範囲外にあります
となります。
No.1
- 回答日時:
この現象そのものは、調べていませんが、
すでにものすごいバグを書いていますよ。
memcpy(&cWork[0],"こんにちは",sizeof(cWork));
これですけど・・・、sizeof(cWork)の帰り値が絶対に文字より長くないですか?
結果存在していないメモリを参照して、メモリ破壊しますね。
memcpyはテキスト用ではないので"\0"では停止せず、どんどん破壊を
繰り返しますよ・・・
それと、FORMってのがわかりませんが、WINDOWSの文字コードって
そのままANSIじゃなくなかったでした?WCHARだった気がします。
これだとさらにメモリ壊すので、ちょい調べてもらえますか?
この回答への補足
回答ありがとうございます。
memcpy(&cWork[0],"こんにちは",sizeof(cWork));
ではなく
strcpy( work[0], "こんにちは");
でしたね。
ウォッチとが見れないのと関係あるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
配列の中の最大値とそのインデ...
-
VBAで配列引数を値渡しできない...
-
OutOfMemoryExceptionの回避策...
-
vba フィルター 複数条件 3つ以...
-
Excel2010のinputboxで複数デー...
-
DBから取得した値を配列へ代入する
-
複数のtextboxの処理を一括で行...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
デバイスマネージャーの一覧取得
-
レコードセットの中身を配列に...
-
配列のペースト出力結果の書式...
-
構造体?二次元配列?
-
COBOLの基本的な事なので...
-
Redim とEraseの違いは?
-
ASPのReDim Preserveについて
-
VB6のメモリ解放に関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
Excel2010のinputboxで複数デー...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
VBAでMODE関数をつくる
-
Redim とEraseの違いは?
-
VBScriptでCSVファイルを読み出...
-
VB6のメモリ解放に関して
-
VB.NETの配列にExcelから読み込...
-
Segmentation Fault (メモリ制限?)
-
ActiveReports(アクティブレポ...
おすすめ情報