ページ 11

配列のデバッグ時の内容表示について

Posted: 2012年4月26日(木) 10:52
by dom
VC++を使っています.
デバッグ時において,

コード:

int a[100];
だと配列の中身全てを見ることができます.

コード:

int b = new int[100];
だとbの中身(配列の一番目)しか見ることができません.

コード:

std::vector<int> c(100);
だと,中身を全て見ることができます.

ここで,同じ動的配列であるのに,new版だと中身が見られなくて,vector版だと
中身を見ることができるのはなぜなんでしょうか.
vectorを調べていないのでわからないのですが何か特別な実装がされてるのでしょうか.

Re: 配列のデバッグ時の内容表示について

Posted: 2012年4月26日(木) 11:36
by beatle
std::vectorは内部に配列の長さや実際に格納されている要素の数などを保持していますから、それらの値をVisual C++が自動で認識しているのだと思います。
本当のからくりは知りませんけど。

Re: 配列のデバッグ時の内容表示について

Posted: 2012年4月26日(木) 11:49
by Blue
VCの場合、デバッグ時の変数の表示(ローカルウィンドウとかウォッチ)のときに
どのように解釈するのかを示したファイルがあって、それに従って表示しています。

VC2005である場合
C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat
がそれに当たります。

vectorの定義も記述があります。

以前、ATLのCArrayとかを手動で追加した記憶があります。

Re: 配列のデバッグ時の内容表示について

Posted: 2012年4月26日(木) 12:00
by 天空橋光
ご参考までに、配列のポインタについてはクイックウォッチとかで以下のようにやると一応見れますよ。

b, 100

ちなみに、2番目のコードは、以下の間違いですよね?

コード:

int* b = new int[100]; 

Re: 配列のデバッグ時の内容表示について

Posted: 2012年4月26日(木) 13:50
by dom
天空橋光さんのおっしゃる通り

コード:

int* b = new int[100]; 
でした.

なるほど,VCにそのような設定があったのですね.勉強になりました.